LeetCode56 Merge Intervals 合并区间

问题描述:
Given a collection of intervals, merge all overlapping intervals.

Example 1:

Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]

Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:

Input: [[1,4],[4,5]]
Output: [[1,5]]

Explanation: Intervals [1,4] and [4,5] are considerred overlapping.
题源:here;完整实现:here
思路:
intervalsstart升序排列,然后遍历intervals,有intervals[i].end<=intervals[i+1].start的情况就进行合并,代码如下:

class Solution {
public:
    static bool cmp(Interval a, Interval b){
        return a.start < b.start;
    }
    vector<Interval> merge(vector<Interval>& intervals) {
        if (intervals.size() == 0) return intervals;
        sort(intervals.begin(), intervals.end(), cmp);

        int i = 0;
        while (i < intervals.size() - 1){
            if (intervals[i].end >= intervals[i + 1].start){
                intervals[i].end = max(intervals[i + 1].end, intervals[i].end);
                intervals.erase(intervals.begin() + i + 1);
            }
            else i++;
        }

        return intervals;
    }
};

猜你喜欢

转载自blog.csdn.net/m0_37518259/article/details/80890771
今日推荐