-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmerge_intervals.cpp
More file actions
39 lines (39 loc) · 1.21 KB
/
Copy pathmerge_intervals.cpp
File metadata and controls
39 lines (39 loc) · 1.21 KB
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
36
37
38
39
#include <vector>
#include <algorithm>
using std::vector;
using std::min;
using std::max;
class Solution {
public:
typedef vector<vector<int>> vvi;
typedef vector<int> vi;
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vvi new_intervals;
sort(intervals.begin(), intervals.end(), [](const vi& a, const vi& b) {
if (a[0] < b[0]) {
return true;
} else if (a[0] > b[0]) {
return false;
} else {
return a[1] < b[1];
}
});
if (intervals.size() == 0) {
return new_intervals;
}
new_intervals.push_back(intervals[0]);
for (int i = 1; i < intervals.size(); ++i) {
int curr_start = new_intervals.back()[0];
int curr_end = new_intervals.back()[1];
int next_start = intervals[i][0];
int next_end = intervals[i][1];
if (curr_end >= next_start) {
new_intervals.back()[0] = min(curr_start, next_start);
new_intervals.back()[1] = max(curr_end, next_end);
} else {
new_intervals.push_back(intervals[i]);
}
}
return new_intervals;
}
};