Skip to content

Commit 9f79e10

Browse files
authored
Merge pull request #70 from KongJHong/master
Create Solution 056[CPP]
2 parents 357b8da + dc1c5fb commit 9f79e10

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
给出一个区间的集合,请合并所有重叠的区间。
2+
```
3+
示例 1:
4+
输入: [[1,3],[2,6],[8,10],[15,18]]
5+
输出: [[1,6],[8,10],[15,18]]
6+
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
7+
8+
示例 2:
9+
输入: [[1,4],[4,5]]
10+
输出: [[1,5]]
11+
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
12+
```
13+
14+
-------------------
15+
思路:
16+
17+
1. 对容器按start值从小到大排序
18+
2. 两两顺序比较,用第一个元素的end值和第二个元素的start值比较
19+
3. 如果后start比前end小,且前end比后end小,则合并!
20+
4. 不满足3,则直接插入
21+
22+
时间复杂度O(n)
23+
24+
```CPP
25+
/**
26+
* Definition for an interval.
27+
* struct Interval {
28+
* int start;
29+
* int end;
30+
* Interval() : start(0), end(0) {}
31+
* Interval(int s, int e) : start(s), end(e) {}
32+
* };
33+
*/
34+
bool cmp(Interval &val1,Interval &val2){
35+
return !(val1.start >= val2.start);
36+
}
37+
38+
class Solution {
39+
public:
40+
vector<Interval> merge(vector<Interval>& intervals) {
41+
42+
int len = intervals.size();
43+
if(len <= 1)return intervals;
44+
45+
sort(intervals.begin(),intervals.end(),cmp);
46+
47+
vector<Interval> ans;
48+
ans.push_back(intervals[0]);
49+
50+
for(int i = 1;i<len;i++){
51+
if(ans.back().end >= intervals[i].start){
52+
ans.back().end = max(ans.back().end,intervals[i].end);
53+
}
54+
else{
55+
ans.push_back(intervals[i]);
56+
}
57+
}
58+
return ans;
59+
}
60+
};
61+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
bool cmp(Interval &val1,Interval &val2){
11+
return !(val1.start >= val2.start);
12+
}
13+
14+
class Solution {
15+
public:
16+
vector<Interval> merge(vector<Interval>& intervals) {
17+
18+
int len = intervals.size();
19+
if(len <= 1)return intervals;
20+
21+
sort(intervals.begin(),intervals.end(),cmp);
22+
23+
vector<Interval> ans;
24+
ans.push_back(intervals[0]);
25+
26+
for(int i = 1;i<len;i++){
27+
if(ans.back().end >= intervals[i].start){
28+
ans.back().end = max(ans.back().end,intervals[i].end);
29+
}
30+
else{
31+
ans.push_back(intervals[i]);
32+
}
33+
}
34+
return ans;
35+
}
36+
};

0 commit comments

Comments
 (0)