lurenaa的博客

🥛使用数组

  使用数组来进行操作,特别[0,1][2,4]这样连在一起。却没有相交的情况

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
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
char arr[3000] = "";
vector<vector<int>> res;
for(auto x : intervals) {
memset(arr + x[0], '1' ,x[1] - x[0]);
if(arr[x[1]] != '1')
arr[x[1]] = '2';
else
arr[x[1]] = '1';
}
int count = 0, k;
for(int i = 0; i < 3000; ++i) {
if(arr[i] != '\0') {
count = 0;
for(k = i; k < 3000 && arr[k] == '1'; ++k) {
arr[k] = '\0';
++count;
}
arr[k] = '\0';
res.push_back(vector<int>{i, i + count});
}
}
return res;
}
};

Accepted

169/169 cases passed (20 ms)

Your runtime beats 90.61 % of cpp submissions

Your memory usage beats 5.08 % of cpp submissions (13.3 MB)


🚆排序后比较

  

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
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
sort(intervals.begin(), intervals.end(), [](const vector<int>& a ,const vector<int>& b){
return a[0] < b[0];
});
// for(auto x : intervals) {
// cout << x[0] << x[1] << endl;
// }
int i = 0, beg, endx, n = intervals.size();
while(i < n) {
beg = intervals[i][0];
endx = intervals[i][1];
while(i < n - 1&& intervals[i + 1][0] <= endx) {
++i;
if(intervals[i][1] > endx)
endx = intervals[i][1];
}
// cout << beg << " " << endx << endl;
res.push_back(vector<int>{beg, endx});
++i;
}
return res;
}
};

Accepted

169/169 cases passed (12 ms)

Your runtime beats 99.88 % of cpp submissions

Your memory usage beats 5.08 % of cpp submissions (12.7 MB)