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,今日份的博客就写到这里,这一期的贪心算法好难想,明天继续加油!!!
—还没看下期的题,但是我的栈还有一节没写;
–追上时间进度了!!(笑
-孩子们,这并不好笑😊。