題目鏈接: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.?總結
(待更新...)
?相關題目和后續提高: