第八章 贪心算法part05

2026.03.19 03.04 第三十六天

56 合并区间

创建一个新数组,在新数组上进行修改,当发现重叠区间时直接修改新数组中区间的右边界,不用pushback,当发现不重叠区间时直接pushback。

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) {
        if(intervals.size() == 1) return intervals;
        sort(intervals.begin(), intervals.end(), cmp);
        vector<vector<int>> result;
        result.push_back(intervals[0]);
        for(int i = 1; i < intervals.size(); i++) {
            if(result.back()[1] >= intervals[i][0]) {
                result.back()[1] = max(result.back()[1], intervals[i][1]);
            }
            else {
                result.push_back(intervals[i]);
            }
        }
        return result;
    }
};

738 单调递增的数字

想到了大体算法,但是具体实现起来比较困难,CPP语法基础还得提升~

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] < str[i - 1]) {
                flag = i;
                str[i - 1]--;
            }
        }
        for(int i = flag; i < str.size(); i++) {
            str[i] = '9';
        }
        return stoi(str);
    }
};

968 监控二叉树

直接跳过了,二刷再来~

posted @ 2026-03-19 20:58  遠くの君  阅读(1)  评论(0)    收藏  举报