题目链接:56. 合并区间、738.单调递增的数字、968.监控二叉树
文章链接:代码随想录
贪心算法
1. 合并区间
(待更新...)
class Solution {
private:static bool cmp(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if(intervals.size() == 0) return result;sort(intervals.begin(), intervals.end(), cmp);for(int i = 1; i < intervals.size(); i++) {if(intervals[i][0] <= intervals[i - 1][1]){intervals[i][0] = min(intervals[i][0], intervals[i - 1][0]);intervals[i][1] = max(intervals[i][1], intervals[i - 1][1]);} else {result.push_back(intervals[i - 1]);}}result.push_back(intervals[intervals.size() - 1]);return result;}
};
2. 单调递增的数字
(待更新...)
/*本题思路:从后往前遍历,如果前一位数比后一位数小,则将前一位数减1,从后一位数到最后一位数都变成9从而保证最后的整数是最大的单调递增数
*/class Solution {
public:int monotoneIncreasingDigits(int num) {string strNum = to_string(num);int flag = strNum.size();// flag用来标记赋值9从哪里开始// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行for(int i = strNum.size() - 1; i > 0; i--) {if(strNum[i] < strNum[i - 1]) {strNum[i - 1]--;flag = i;}}for(int i = flag; i < strNum.size(); i++) {strNum[i] = '9';}return stoi(strNum);}
};
3. 监控二叉树(提高)
(待更新...)
4. 总结
(待更新...)
相关题目和后续提高: