Merge Intervals - LeetCode

题目链接

Merge Intervals - LeetCode

注意点

  • 区间是无序的
  • 每个区间start一定小于end

解法

解法一:首先以start的值从小到大来排序,排完序我们就可以开始合并了。先把第一个区间存入ret,然后从第二个开始遍历所有区间,如果与ret中最后一个区间有重叠就更新,否则就直接存入ret。时间复杂度O(n)

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> merge(vector<Interval>& intervals) {
        if (intervals.empty()) return {};
        sort(intervals.begin(), intervals.end(), [](Interval &a, Interval &b) {return a.start < b.start;});
        vector<Interval> ret{intervals[0]};
        int i,n = intervals.size();
        for(i = 1;i < n;i++)
        {
            if(ret.back().end < intervals[i].start) ret.push_back(intervals[i]);
            else ret.back().end = max(ret.back().end,intervals[i].end);
        }
        return ret;
    }
};

小结

posted @ 2019-02-25 23:08  闽A2436  阅读(102)  评论(0编辑  收藏  举报