题目描述:
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]
.
解题思路:
先将整个结构体数组按照start的值升序排序,再从第二个结构体开始比较:
如果start>=上一个的start且start<=上一个的end,那么将上一个的end等于两个end中的较大值,然后把当前的结构体删去,循环遍历整个数组。
代码:
/** * 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: static bool cmp(const Interval n1, const Interval n2){ return n1.start<n2.start; } vector<Interval> merge(vector<Interval>& intervals) { int n = intervals.size(); if(n <= 1) return intervals; sort(intervals.begin(), intervals.end(), cmp); for(int i = 1; i < n; i++){ if(intervals[i].start >= intervals[i-1].start && intervals[i].start <= intervals[i-1].end){ intervals[i-1].end = intervals[i-1].end>intervals[i].end?intervals[i-1].end:intervals[i].end; intervals.erase(intervals.begin()+i); n--; i--; } } return intervals; } };