[Leetcode] Merge Intervals

来源:互联网 发布:各种协议端口号 编辑:程序博客网 时间:2024/06/16 23:51

题目:

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].


思路:排序 + merge.


class Solution {public:    struct compare {        bool operator()(const Interval& a, const Interval& b) {   //return true if a < b            if (a.start == b.start) return a.end < b.end;            else return a.start < b.start;        }    };        vector<Interval> merge(vector<Interval> &intervals) {        vector<Interval> result;        if ((int)intervals.size() < 1) return result;        sort(intervals.begin(), intervals.end(), compare());        result.push_back(intervals[0]);        for (int i = 1; i < (int)intervals.size(); ++i) {            if (result.back().end >= intervals[i].start) {   //merge                if (result.back().end < intervals[i].end) {                    result.back().end = intervals[i].end;                }            } else {                result.push_back(intervals[i]);            }        }        return result;    }};


总结:排序后,每次只需要考虑最后加入到结果中的那个区间和即将加入的区间,如果有交集,判断边界merge. 整个数组遍历一遍即可,复杂度O(n).

0 0
原创粉丝点击