leetcode 56 合并区间

https://leetcode-cn.com/problems/merge-intervals/

leetcode 56 合并区间_第1张图片
写得很死脑筋,代码冗长而且慢。
先排序,按照每个区间头递增排,相同的尾小的放前面

bool cmp(const vector<int> &a, const vector<int> &b) {
        if (a[0] != b[0]) return a[0] < b[0];
        else return a.back() < b.back();
    }

然后方法就很常规,比大小
排序后intervals[i][0] <= intervals[j][0]
1、intervals[i][1] < intervals[j][0],无法合并,区间 i 使命结束,push进去,i = j,j++
2、intervals[i][1] >= intervals[j][0],i 区间的尾取大的那一个
发现最后一个区间没弄进去,于是又加了一句,嗯,变得更丑了

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), cmp);
        vector <vector<int>> ans;
        int i = 0, j = 1;
        if (!intervals.size()) return ans;
        while (j < intervals.size()) {
            if (intervals[i][1] < intervals[j][0]) {
                ans.push_back(intervals[i]);
                i = j, j++;
            } else {
                intervals[i][1] = max(intervals[i][1], intervals[j][1]);
                j++;
            }
        } j--;
        if (intervals[i][1] >= intervals[j][0]) 
            intervals[i][1] = max(intervals[i][1], intervals[j][1]);
        ans.push_back(intervals[i]);
        return ans;
    }
};

你可能感兴趣的:(随笔,code)