代码随想录算法训练营第27天|56. 合并区间、738.单调递增的数字

LeetCode56

2025-02-27 17:47:57 星期四

题目描述:力扣56
文档讲解:代码随想录(programmercarl)56. 合并区间
视频讲解:《代码随想录》算法视频公开课 (opens new window):贪心算法,合并区间有细节!LeetCode:56.合并区间

也是一个重叠问题,这个题和昨天的452用最少的箭引爆气球,还有435无重叠区间很像,改吧改吧就通过了

需要注意的就是,这个题容易卡在第65个测试用例好像是,给了一个[1,4],[2,3]的用例,所以当重叠的时候,需要额外加一个判断,就是这句if (intervals[i][1] < intervals[i - 1][1]) intervals[i][1] = intervals[i - 1][1];,剩下的都没什么大问题

LeetCode测试

点击查看代码
class Solution {
private:
    static bool cmp(vector<int> a, vector<int> b) {
        return a[0] < b[0];
    }
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> 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] = intervals[i - 1][0];
                if (intervals[i][1] < intervals[i - 1][1]) intervals[i][1] = intervals[i - 1][1];
            } else {
                result.push_back(intervals[i - 1]);
            }
        }
        result.push_back(intervals[intervals.size() - 1]);
        return result;
    }
};

LeetCode738

题目描述:力扣738
文档讲解:代码随想录(programmercarl)738.单调递增的数字
视频讲解:《代码随想录》算法视频公开课:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字

代码随想录视频内容简记

这个题目很巧妙,刚上来看没有思路。感觉这个题最终要的就是遍历顺序,正常来想一定是从前向后遍历,但是这样就出问题了,这个题得用从后向前遍历

梳理

  1. 如何求得[32]这个数的最大值呢,其实只要前一位大于后一位,那么前一位减1,后一位置为9即可。这里也即是本题贪的局部最优,每两位数字都采用这个策略,那么全局最优就是递增且最大

  2. 另外就是本题引入了一个flag,用来统一做置9的处理,为什么要统一处理呢?因为如果只是一次一次更改,[1000]这个数就会被修改为900,而不是999,所以得用flag标记之后,最后统一再for循环遍历一次

  3. 另外就是还有一点需要注意,flag在一开始初始化的时候不能像平常一样,直接给初始化为0,应该是int flag = str.size();,为什么要这样做?就是因为[1234],这样每一位都比前面大的情况,flag是不用做变化的,所以最后的for循环就不必要了

LeetCode测试

点击查看代码
class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string str = to_string(n);
        int flag = str.size();
        for (int i = str.size() - 1; i > 0; i--) {
            if (str[i - 1] > str[i]) {
                str[i - 1] -= 1;
                flag = i;
            }
        }
        for (int i = flag; i < str.size(); i++) {
            str[i] = '9';
        }
        return stoi(str);
    }
};
posted on   bnbncch  阅读(604)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示