LeetCode 56 合并区间
题目:
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
解题思路:
按照给出的示例,我们可以发现只要循环一遍,把前后两个区间并列,不可并列就可压到answer中。但实际上题目没有说明给出的集合都是递增的,这样便不可直接循环来做。由此,应该先对这个集合进行排序,使之按照start递增,这样便可按照上述方法解题了。
代码:
1 /** 2 * Definition for an interval. 3 * struct Interval { 4 * int start; 5 * int end; 6 * Interval() : start(0), end(0) {} 7 * Interval(int s, int e) : start(s), end(e) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<Interval> merge(vector<Interval>& intervals) { 13 vector<Interval> ans; 14 if(intervals.empty()) 15 return ans; 16 int len = intervals.size(); 17 sort(intervals.begin(), intervals.end(), [](Interval &a, Interval &b) 18 { 19 return a.start < b.start; 20 }); 21 Interval temp = intervals[0]; 22 for(int i = 1; i < len; ++i) { 23 if(intervals[i].start <= temp.end) { 24 25 temp.end = max(intervals[i].end, temp.end); 26 } 27 else { 28 ans.push_back(temp); 29 temp = intervals[i]; 30 } 31 } 32 ans.push_back(temp); 33 return ans; 34 } 35 };