题目描述
给出一个区间的集合,请合并所有重叠的区间。
示例 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] 可被视为重叠区间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处.
解法1:贪心
思路:
1.先对区间排序,按左区间大小从小到达排序
2.选择一个为a,判断后面的b区间,若a[1]>=b[0],则证明区间重叠,更新区间范围,为max(a[1],b[1])
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 
 | class Solution {public:
 vector<vector<int>> merge(vector<vector<int>>& intervals) {
 sort(intervals.begin(),intervals.end());
 vector<vector<int>> res;
 vector<int> pre;
 int i,n=intervals.size();
 if(n==0)
 return res;
 pre.push_back(intervals[0][0]);
 pre.push_back(intervals[0][1]);
 for(i=0;i<n;i++)
 {
 if(intervals[i][0]<=pre[1])
 {
 if(pre[1]>=intervals[i][1])
 continue;
 else
 {
 pre[1]=intervals[i][1];
 }
 }
 else
 {
 res.push_back(pre);
 pre.clear();
 pre.push_back(intervals[i][0]);
 pre.push_back(intervals[i][1]);
 }
 }
 if(!pre.empty())
 res.push_back(pre);
 return res;
 }
 };
 
 |