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] 可被视为重叠区间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处.

解法1:贪心

思路:

1.先对区间排序,按左区间大小从小到达排序

2.选择一个为a,判断后面的b区间,若a[1]>=b[0],则证明区间重叠,更新区间范围,为max(a[1],b[1])

1
2
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;
}
};