Skip to content

Commit 5932c31

Browse files
committed
feat: update solutions to lc problem: No.0056
No.0056.Merge Intervals
1 parent 4b1ae25 commit 5932c31

File tree

9 files changed

+93
-104
lines changed

9 files changed

+93
-104
lines changed

solution/0000-0099/0056.Merge Intervals/README.md

+29-31
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@
4141

4242
**方法一:区间合并**
4343

44-
区间合并,将所有存在交集的区间进行合并。方法是:先对区间**按照左端点升序排列**,然后遍历区间进行合并
44+
这道题是一道典型的区间合并问题,即给定一些区间,要求将所有有交集的区间合并成一个区间
4545

46-
模板:
46+
我们可以将区间按照左端点升序排列,然后遍历区间进行合并操作。
47+
48+
模板如下:
4749

4850
```python
4951
def merge(intervals):
@@ -60,6 +62,8 @@ def merge(intervals):
6062
return ans
6163
```
6264

65+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 为区间个数。
66+
6367
<!-- tabs:start -->
6468

6569
### **Python3**
@@ -118,12 +122,13 @@ public:
118122
int st = intervals[0][0], ed = intervals[0][1];
119123
vector<vector<int>> ans;
120124
for (int i = 1; i < intervals.size(); ++i) {
121-
int s = intervals[i][0], e = intervals[i][1];
122-
if (ed < s) {
125+
if (ed < intervals[i][0]) {
123126
ans.push_back({st, ed});
124-
st = s, ed = e;
125-
} else
126-
ed = max(ed, e);
127+
st = intervals[i][0];
128+
ed = intervals[i][1];
129+
} else {
130+
ed = max(ed, intervals[i][1]);
131+
}
127132
}
128133
ans.push_back({st, ed});
129134
return ans;
@@ -134,12 +139,11 @@ public:
134139
### **Go**
135140
136141
```go
137-
func merge(intervals [][]int) [][]int {
142+
func merge(intervals [][]int) (ans [][]int) {
138143
sort.Slice(intervals, func(i, j int) bool {
139144
return intervals[i][0] < intervals[j][0]
140145
})
141146
st, ed := intervals[0][0], intervals[0][1]
142-
var ans [][]int
143147
for _, e := range intervals[1:] {
144148
if ed < e[0] {
145149
ans = append(ans, []int{st, ed})
@@ -161,21 +165,16 @@ public class Solution {
161165
intervals = intervals.OrderBy(a => a[0]).ToArray();
162166
int st = intervals[0][0], ed = intervals[0][1];
163167
var ans = new List<int[]>();
164-
for (int i = 1; i < intervals.Length; ++i)
165-
{
166-
int s = intervals[i][0], e = intervals[i][1];
167-
if (ed < s)
168-
{
169-
ans.Add(new int[]{st, ed});
170-
st = s;
171-
ed = e;
172-
}
173-
else
174-
{
175-
ed = Math.Max(ed, e);
168+
for (int i = 1; i < intervals.Length; ++i) {
169+
if (ed < intervals[i][0]) {
170+
ans.Add(new int[] { st, ed });
171+
st = intervals[i][0];
172+
ed = intervals[i][1];
173+
} else {
174+
ed = Math.Max(ed, intervals[i][1]);
176175
}
177176
}
178-
ans.Add(new int[]{st, ed});
177+
ans.Add(new int[] { st, ed });
179178
return ans.ToArray();
180179
}
181180
}
@@ -186,18 +185,17 @@ public class Solution {
186185
```ts
187186
function merge(intervals: number[][]): number[][] {
188187
intervals.sort((a, b) => a[0] - b[0]);
189-
let ans: number[][] = [];
190-
let index: number = -1;
191-
for (let interval of intervals) {
192-
if (index == -1 || ans[index][1] < interval[0]) {
193-
// 保留
194-
ans.push(interval);
195-
index++;
188+
const ans: number[][] = [];
189+
let [st, ed] = intervals[0];
190+
for (const [s, e] of intervals.slice(1)) {
191+
if (ed < s) {
192+
ans.push([st, ed]);
193+
[st, ed] = [s, e];
196194
} else {
197-
// 求交集
198-
ans[index][1] = Math.max(ans[index][1], interval[1]);
195+
ed = Math.max(ed, e);
199196
}
200197
}
198+
ans.push([st, ed]);
201199
return ans;
202200
}
203201
```

solution/0000-0099/0056.Merge Intervals/README_EN.md

+23-29
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,13 @@ public:
8888
int st = intervals[0][0], ed = intervals[0][1];
8989
vector<vector<int>> ans;
9090
for (int i = 1; i < intervals.size(); ++i) {
91-
int s = intervals[i][0], e = intervals[i][1];
92-
if (ed < s) {
91+
if (ed < intervals[i][0]) {
9392
ans.push_back({st, ed});
94-
st = s, ed = e;
95-
} else
96-
ed = max(ed, e);
93+
st = intervals[i][0];
94+
ed = intervals[i][1];
95+
} else {
96+
ed = max(ed, intervals[i][1]);
97+
}
9798
}
9899
ans.push_back({st, ed});
99100
return ans;
@@ -104,12 +105,11 @@ public:
104105
### **Go**
105106
106107
```go
107-
func merge(intervals [][]int) [][]int {
108+
func merge(intervals [][]int) (ans [][]int) {
108109
sort.Slice(intervals, func(i, j int) bool {
109110
return intervals[i][0] < intervals[j][0]
110111
})
111112
st, ed := intervals[0][0], intervals[0][1]
112-
var ans [][]int
113113
for _, e := range intervals[1:] {
114114
if ed < e[0] {
115115
ans = append(ans, []int{st, ed})
@@ -131,21 +131,16 @@ public class Solution {
131131
intervals = intervals.OrderBy(a => a[0]).ToArray();
132132
int st = intervals[0][0], ed = intervals[0][1];
133133
var ans = new List<int[]>();
134-
for (int i = 1; i < intervals.Length; ++i)
135-
{
136-
int s = intervals[i][0], e = intervals[i][1];
137-
if (ed < s)
138-
{
139-
ans.Add(new int[]{st, ed});
140-
st = s;
141-
ed = e;
142-
}
143-
else
144-
{
145-
ed = Math.Max(ed, e);
134+
for (int i = 1; i < intervals.Length; ++i) {
135+
if (ed < intervals[i][0]) {
136+
ans.Add(new int[] { st, ed });
137+
st = intervals[i][0];
138+
ed = intervals[i][1];
139+
} else {
140+
ed = Math.Max(ed, intervals[i][1]);
146141
}
147142
}
148-
ans.Add(new int[]{st, ed});
143+
ans.Add(new int[] { st, ed });
149144
return ans.ToArray();
150145
}
151146
}
@@ -156,18 +151,17 @@ public class Solution {
156151
```ts
157152
function merge(intervals: number[][]): number[][] {
158153
intervals.sort((a, b) => a[0] - b[0]);
159-
let ans: number[][] = [];
160-
let index: number = -1;
161-
for (let interval of intervals) {
162-
if (index == -1 || ans[index][1] < interval[0]) {
163-
// 保留
164-
ans.push(interval);
165-
index++;
154+
const ans: number[][] = [];
155+
let [st, ed] = intervals[0];
156+
for (const [s, e] of intervals.slice(1)) {
157+
if (ed < s) {
158+
ans.push([st, ed]);
159+
[st, ed] = [s, e];
166160
} else {
167-
// 求交集
168-
ans[index][1] = Math.max(ans[index][1], interval[1]);
161+
ed = Math.max(ed, e);
169162
}
170163
}
164+
ans.push([st, ed]);
171165
return ans;
172166
}
173167
```

solution/0000-0099/0056.Merge Intervals/Solution.cpp

+6-5
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ class Solution {
55
int st = intervals[0][0], ed = intervals[0][1];
66
vector<vector<int>> ans;
77
for (int i = 1; i < intervals.size(); ++i) {
8-
int s = intervals[i][0], e = intervals[i][1];
9-
if (ed < s) {
8+
if (ed < intervals[i][0]) {
109
ans.push_back({st, ed});
11-
st = s, ed = e;
12-
} else
13-
ed = max(ed, e);
10+
st = intervals[i][0];
11+
ed = intervals[i][1];
12+
} else {
13+
ed = max(ed, intervals[i][1]);
14+
}
1415
}
1516
ans.push_back({st, ed});
1617
return ans;

solution/0000-0099/0056.Merge Intervals/Solution.cs

+8-13
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,16 @@ public int[][] Merge(int[][] intervals) {
33
intervals = intervals.OrderBy(a => a[0]).ToArray();
44
int st = intervals[0][0], ed = intervals[0][1];
55
var ans = new List<int[]>();
6-
for (int i = 1; i < intervals.Length; ++i)
7-
{
8-
int s = intervals[i][0], e = intervals[i][1];
9-
if (ed < s)
10-
{
11-
ans.Add(new int[]{st, ed});
12-
st = s;
13-
ed = e;
14-
}
15-
else
16-
{
17-
ed = Math.Max(ed, e);
6+
for (int i = 1; i < intervals.Length; ++i) {
7+
if (ed < intervals[i][0]) {
8+
ans.Add(new int[] { st, ed });
9+
st = intervals[i][0];
10+
ed = intervals[i][1];
11+
} else {
12+
ed = Math.Max(ed, intervals[i][1]);
1813
}
1914
}
20-
ans.Add(new int[]{st, ed});
15+
ans.Add(new int[] { st, ed });
2116
return ans.ToArray();
2217
}
2318
}

solution/0000-0099/0056.Merge Intervals/Solution.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
func merge(intervals [][]int) [][]int {
1+
func merge(intervals [][]int) (ans [][]int) {
22
sort.Slice(intervals, func(i, j int) bool {
33
return intervals[i][0] < intervals[j][0]
44
})
55
st, ed := intervals[0][0], intervals[0][1]
6-
var ans [][]int
76
for _, e := range intervals[1:] {
87
if ed < e[0] {
98
ans = append(ans, []int{st, ed})
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
function merge(intervals: number[][]): number[][] {
22
intervals.sort((a, b) => a[0] - b[0]);
3-
let ans: number[][] = [];
4-
let index: number = -1;
5-
for (let interval of intervals) {
6-
if (index == -1 || ans[index][1] < interval[0]) {
7-
// 保留
8-
ans.push(interval);
9-
index++;
3+
const ans: number[][] = [];
4+
let [st, ed] = intervals[0];
5+
for (const [s, e] of intervals.slice(1)) {
6+
if (ed < s) {
7+
ans.push([st, ed]);
8+
[st, ed] = [s, e];
109
} else {
11-
// 求交集
12-
ans[index][1] = Math.max(ans[index][1], interval[1]);
10+
ed = Math.max(ed, e);
1311
}
1412
}
13+
ans.push([st, ed]);
1514
return ans;
1615
}

solution/0000-0099/0057.Insert Interval/README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,13 @@ public:
134134
int st = intervals[0][0], ed = intervals[0][1];
135135
vector<vector<int>> ans;
136136
for (int i = 1; i < intervals.size(); ++i) {
137-
int s = intervals[i][0], e = intervals[i][1];
138-
if (ed < s) {
137+
if (ed < intervals[i][0]) {
139138
ans.push_back({st, ed});
140-
st = s, ed = e;
141-
} else
142-
ed = max(ed, e);
139+
st = intervals[i][0];
140+
ed = intervals[i][1];
141+
} else {
142+
ed = max(ed, intervals[i][1]);
143+
}
143144
}
144145
ans.push_back({st, ed});
145146
return ans;

solution/0000-0099/0057.Insert Interval/README_EN.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,13 @@ public:
102102
int st = intervals[0][0], ed = intervals[0][1];
103103
vector<vector<int>> ans;
104104
for (int i = 1; i < intervals.size(); ++i) {
105-
int s = intervals[i][0], e = intervals[i][1];
106-
if (ed < s) {
105+
if (ed < intervals[i][0]) {
107106
ans.push_back({st, ed});
108-
st = s, ed = e;
109-
} else
110-
ed = max(ed, e);
107+
st = intervals[i][0];
108+
ed = intervals[i][1];
109+
} else {
110+
ed = max(ed, intervals[i][1]);
111+
}
111112
}
112113
ans.push_back({st, ed});
113114
return ans;

solution/0000-0099/0057.Insert Interval/Solution.cpp

+6-5
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ class Solution {
1010
int st = intervals[0][0], ed = intervals[0][1];
1111
vector<vector<int>> ans;
1212
for (int i = 1; i < intervals.size(); ++i) {
13-
int s = intervals[i][0], e = intervals[i][1];
14-
if (ed < s) {
13+
if (ed < intervals[i][0]) {
1514
ans.push_back({st, ed});
16-
st = s, ed = e;
17-
} else
18-
ed = max(ed, e);
15+
st = intervals[i][0];
16+
ed = intervals[i][1];
17+
} else {
18+
ed = max(ed, intervals[i][1]);
19+
}
1920
}
2021
ans.push_back({st, ed});
2122
return ans;

0 commit comments

Comments
 (0)