Day26 OK,今日份的打卡!第二十六天
- 以下是今日份的總結
- 合并區間
- 單調遞增的數字
以下是今日份的總結
56 合并區間
738 單調遞增的數字
今天的題目難度不低,盡量還是寫一些簡潔代碼 ^?_?^
合并區間
思路:
先排序,按照左邊界排序,用右邊界進行對比,并對數組種邊界進行更新
值得注意的是
如何去模擬合并區間呢?
其實就是用合并區間后左邊界和右邊界,作為一個新的區間,加入到result數組里就可以了。如果沒有合并就把原區間加入到result數組。
static bool cmp(vector<int> a,vector<int>b){return a[0]<b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> res;//判空if(intervals.size()==0) return intervals;//cmp參數可以使用了lambda表達式//[](const vector<int>& a, const vector<int>& b){return a[0] < b[0];}sort(intervals.begin(),intervals.end(),cmp);//排序//插入排序后intervals的首個數組res.push_back(intervals[0]);for(int i = 1; i<intervals.size() ; i++){//res.back()[1]取的是末尾數組的右邊界if(res.back()[1]>=intervals[i][0]){//更新區間右邊界,去除重復部分res.back()[1] = max(res.back()[1],intervals[i][1]);}else{res.push_back(intervals[i]);}}return res;}
單調遞增的數字
思路:
用string對數字進行遍歷操作,從后向前遍歷,高位比低位數字大時(例如:32),標記地位并把高位減一,遍歷完查看標記位置,并將從標記開始位置到末尾全部賦值為9(例如:32 -> 22 ->29)
值得注意的是
用一個flag來標記從哪里開始賦值9
int monotoneIncreasingDigits(int n) {string str = to_string(n);// flag用來標記賦值9從哪里開始int flag = str.size();//從后向前for(int i = str.size()-1;i>0;i--){if(str[i-1] > str[i]){flag = i;str[i-1]--;}}for(int i = flag; i< str.size(); i++){str[i] = '9';}return stoi(str);}
寫在最后
----OK,今日份的博客就寫到這里,這一期的貪心算法好難想,明天繼續加油!!!
—還沒看下期的題,但是我的棧還有一節沒寫;
–追上時間進度了!!(笑
-孩子們,這并不好笑😊。