Skip to content

Commit 7b9daf7

Browse files
committed
feat: update solutions to lc/lcof2 problems
* lc No.0056.Merge Intervals * lc No.0057.Insert Interval * lcof2 No.074.Merge Intervals
1 parent 8d764b0 commit 7b9daf7

20 files changed

+439
-648
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
- [用邮票贴满网格图](/solution/2100-2199/2132.Stamping%20the%20Grid/README.md) - 二维前缀和、二维差分
4848
- [无重复字符的最长子串](/solution/0000-0099/0003.Longest%20Substring%20Without%20Repeating%20Characters/README.md) - 双指针、哈希表
4949
- [位 1 的个数](/solution/0100-0199/0191.Number%20of%201%20Bits/README.md) - 位运算、lowbit
50+
- [合并区间](/solution/0000-0099/0056.Merge%20Intervals/README.md) - 区间合并
5051

5152
<!-- 排序算法、待补充 -->
5253

README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
4646
- [ Stamping the Grid](/solution/2100-2199/2132.Stamping%20the%20Grid/README_EN.md) - Prefix sum, Difference array
4747
- [Longest Substring Without Repeating Characters](/solution/0000-0099/0003.Longest%20Substring%20Without%20Repeating%20Characters/README_EN.md) - Two pointers, Hash table
4848
- [Number of 1 Bits](/solution/0100-0199/0191.Number%20of%201%20Bits/README_EN.md) - Bit manipulation, Lowbit
49+
- [Merge Intervals](/solution/0000-0099/0056.Merge%20Intervals/README_EN.md) - Merge intervals
4950

5051
### 2. Search
5152

lcof2/剑指 Offer II 074. 合并区间/README.md

+62-91
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,25 @@
4141

4242
<!-- 这里可写通用的实现逻辑 -->
4343

44+
**方法一:区间合并**
45+
4446
区间合并,将所有存在交集的区间进行合并。
4547

4648
模板:
4749

48-
```py
50+
```python
4951
def merge(intervals):
50-
res = []
51-
intervals.sort(key=lambda x: x[0])
52-
st = ed = -1
53-
for s, e in intervals:
52+
ans = []
53+
intervals.sort()
54+
st, ed = intervals[0]
55+
for s, e in intervals[1:]:
5456
if ed < s:
55-
if st != -1:
56-
res.append([st, ed])
57-
st, ed = e[0], e[1]
57+
ans.append([st, ed])
58+
st, ed = s, e
5859
else:
59-
ed = max(ed, e[1])
60-
if st != -1:
61-
res.append([st, ed])
62-
return res
60+
ed = max(ed, e)
61+
ans.append([st, ed])
62+
return ans
6363
```
6464

6565
<!-- tabs:start -->
@@ -71,19 +71,17 @@ def merge(intervals):
7171
```python
7272
class Solution:
7373
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
74-
intervals.sort(key=lambda x: x[0])
75-
st = ed = -1
76-
res = []
77-
for s, e in intervals:
74+
intervals.sort()
75+
ans = []
76+
st, ed = intervals[0]
77+
for s, e in intervals[1:]:
7878
if ed < s:
79-
if st != -1:
80-
res.append([st, ed])
79+
ans.append([st, ed])
8180
st, ed = s, e
8281
else:
8382
ed = max(ed, e)
84-
if st != -1:
85-
res.append([st, ed])
86-
return res
83+
ans.append([st, ed])
84+
return ans
8785
```
8886

8987
### **Java**
@@ -94,23 +92,20 @@ class Solution:
9492
class Solution {
9593
public int[][] merge(int[][] intervals) {
9694
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));
97-
int st = -1, ed = -1;
98-
List<int[]> res = new ArrayList<>();
99-
for (int[] e : intervals) {
100-
if (ed < e[0]) {
101-
if (st != -1) {
102-
res.add(new int[]{st, ed});
103-
}
104-
st = e[0];
105-
ed = e[1];
95+
int st = intervals[0][0], ed = intervals[0][1];
96+
List<int[]> ans = new ArrayList<>();
97+
for (int i = 1; i < intervals.length; ++i) {
98+
int s = intervals[i][0], e = intervals[i][1];
99+
if (ed < s) {
100+
ans.add(new int[]{st, ed});
101+
st = s;
102+
ed = e;
106103
} else {
107-
ed = Math.max(ed, e[1]);
104+
ed = Math.max(ed, e);
108105
}
109106
}
110-
if (st != -1) {
111-
res.add(new int[]{st, ed});
112-
}
113-
return res.toArray(new int[res.size()][]);
107+
ans.add(new int[]{st, ed});
108+
return ans.toArray(new int[ans.size()][]);
114109
}
115110
}
116111
```
@@ -120,31 +115,22 @@ class Solution {
120115
```cpp
121116
class Solution {
122117
public:
123-
vector<vector<int>> merge(vector<vector<int>> &intervals) {
118+
vector<vector<int>> merge(vector<vector<int>>& intervals) {
124119
sort(intervals.begin(), intervals.end());
125-
vector<vector<int>> res;
126-
int st = -1, ed = -1;
127-
for (auto e : intervals)
120+
int st = intervals[0][0], ed = intervals[0][1];
121+
vector<vector<int>> ans;
122+
for (int i = 1; i < intervals.size(); ++i)
128123
{
129-
if (ed < e[0])
130-
{
131-
if (st != -1)
132-
{
133-
res.push_back({st, ed});
134-
}
135-
st = e[0];
136-
ed = e[1];
137-
}
138-
else
124+
int s = intervals[i][0], e = intervals[i][1];
125+
if (ed < s)
139126
{
140-
ed = max(ed, e[1]);
127+
ans.push_back({st, ed});
128+
st = s, ed = e;
141129
}
130+
else ed = max(ed, e);
142131
}
143-
if (st != -1)
144-
{
145-
res.push_back({st, ed});
146-
}
147-
return res;
132+
ans.push_back({st, ed});
133+
return ans;
148134
}
149135
};
150136
```
@@ -153,63 +139,48 @@ public:
153139
154140
```go
155141
func merge(intervals [][]int) [][]int {
156-
var res [][]int
157142
sort.Slice(intervals, func(i, j int) bool {
158143
return intervals[i][0] < intervals[j][0]
159144
})
160-
st, ed := -1, -1
161-
for _, e := range intervals {
145+
st, ed := intervals[0][0], intervals[0][1]
146+
var ans [][]int
147+
for _, e := range intervals[1:] {
162148
if ed < e[0] {
163-
if st != -1 {
164-
res = append(res, []int{st, ed})
165-
}
149+
ans = append(ans, []int{st, ed})
166150
st, ed = e[0], e[1]
167-
} else {
168-
ed = max(ed, e[1])
151+
} else if ed < e[1] {
152+
ed = e[1]
169153
}
170154
}
171-
if st != -1 {
172-
res = append(res, []int{st, ed})
173-
}
174-
return res
175-
}
176-
177-
func max(a, b int) int {
178-
if a > b {
179-
return a
180-
}
181-
return b
155+
ans = append(ans, []int{st, ed})
156+
return ans
182157
}
183158
```
184159

185160
### **C#**
186161

187-
```cpp
162+
```cs
188163
public class Solution {
189164
public int[][] Merge(int[][] intervals) {
190-
var res = new List<int[]>();
191-
int st = -1, ed = -1;
192-
foreach (var e in intervals.OrderBy(a => a[0]))
165+
intervals = intervals.OrderBy(a => a[0]).ToArray();
166+
int st = intervals[0][0], ed = intervals[0][1];
167+
var ans = new List<int[]>();
168+
for (int i = 1; i < intervals.Length; ++i)
193169
{
194-
if (ed < e[0])
170+
int s = intervals[i][0], e = intervals[i][1];
171+
if (ed < s)
195172
{
196-
if (st != -1)
197-
{
198-
res.Add(new int[] { st, ed });
199-
}
200-
st = e[0];
201-
ed = e[1];
173+
ans.Add(new int[]{st, ed});
174+
st = s;
175+
ed = e;
202176
}
203177
else
204178
{
205-
ed = Math.Max(ed, e[1]);
179+
ed = Math.Max(ed, e);
206180
}
207181
}
208-
if (st != -1)
209-
{
210-
res.Add(new int[] { st, ed });
211-
}
212-
return res.ToArray();
182+
ans.Add(new int[]{st, ed});
183+
return ans.ToArray();
213184
}
214185
}
215186
```
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,20 @@
11
class Solution {
22
public:
3-
vector<vector<int>> merge(vector<vector<int>> &intervals) {
3+
vector<vector<int>> merge(vector<vector<int>>& intervals) {
44
sort(intervals.begin(), intervals.end());
5-
vector<vector<int>> res;
6-
int st = -1, ed = -1;
7-
for (auto e : intervals)
5+
int st = intervals[0][0], ed = intervals[0][1];
6+
vector<vector<int>> ans;
7+
for (int i = 1; i < intervals.size(); ++i)
88
{
9-
if (ed < e[0])
9+
int s = intervals[i][0], e = intervals[i][1];
10+
if (ed < s)
1011
{
11-
if (st != -1)
12-
{
13-
res.push_back({st, ed});
14-
}
15-
st = e[0];
16-
ed = e[1];
12+
ans.push_back({st, ed});
13+
st = s, ed = e;
1714
}
18-
else
19-
{
20-
ed = max(ed, e[1]);
21-
}
22-
}
23-
if (st != -1)
24-
{
25-
res.push_back({st, ed});
15+
else ed = max(ed, e);
2616
}
27-
return res;
17+
ans.push_back({st, ed});
18+
return ans;
2819
}
2920
};
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,23 @@
11
public class Solution {
22
public int[][] Merge(int[][] intervals) {
3-
var res = new List<int[]>();
4-
int st = -1, ed = -1;
5-
foreach (var e in intervals.OrderBy(a => a[0]))
3+
intervals = intervals.OrderBy(a => a[0]).ToArray();
4+
int st = intervals[0][0], ed = intervals[0][1];
5+
var ans = new List<int[]>();
6+
for (int i = 1; i < intervals.Length; ++i)
67
{
7-
if (ed < e[0])
8+
int s = intervals[i][0], e = intervals[i][1];
9+
if (ed < s)
810
{
9-
if (st != -1)
10-
{
11-
res.Add(new int[] { st, ed });
12-
}
13-
st = e[0];
14-
ed = e[1];
11+
ans.Add(new int[]{st, ed});
12+
st = s;
13+
ed = e;
1514
}
1615
else
1716
{
18-
ed = Math.Max(ed, e[1]);
17+
ed = Math.Max(ed, e);
1918
}
2019
}
21-
if (st != -1)
22-
{
23-
res.Add(new int[] { st, ed });
24-
}
25-
return res.ToArray();
20+
ans.Add(new int[]{st, ed});
21+
return ans.ToArray();
2622
}
2723
}
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,17 @@
11
func merge(intervals [][]int) [][]int {
2-
var res [][]int
32
sort.Slice(intervals, func(i, j int) bool {
43
return intervals[i][0] < intervals[j][0]
54
})
6-
st, ed := -1, -1
7-
for _, e := range intervals {
5+
st, ed := intervals[0][0], intervals[0][1]
6+
var ans [][]int
7+
for _, e := range intervals[1:] {
88
if ed < e[0] {
9-
if st != -1 {
10-
res = append(res, []int{st, ed})
11-
}
9+
ans = append(ans, []int{st, ed})
1210
st, ed = e[0], e[1]
13-
} else {
14-
ed = max(ed, e[1])
11+
} else if ed < e[1] {
12+
ed = e[1]
1513
}
1614
}
17-
if st != -1 {
18-
res = append(res, []int{st, ed})
19-
}
20-
return res
21-
}
22-
23-
func max(a, b int) int {
24-
if a > b {
25-
return a
26-
}
27-
return b
15+
ans = append(ans, []int{st, ed})
16+
return ans
2817
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
class Solution {
22
public int[][] merge(int[][] intervals) {
33
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));
4-
int st = -1, ed = -1;
5-
List<int[]> res = new ArrayList<>();
6-
for (int[] e : intervals) {
7-
if (ed < e[0]) {
8-
if (st != -1) {
9-
res.add(new int[]{st, ed});
10-
}
11-
st = e[0];
12-
ed = e[1];
4+
int st = intervals[0][0], ed = intervals[0][1];
5+
List<int[]> ans = new ArrayList<>();
6+
for (int i = 1; i < intervals.length; ++i) {
7+
int s = intervals[i][0], e = intervals[i][1];
8+
if (ed < s) {
9+
ans.add(new int[]{st, ed});
10+
st = s;
11+
ed = e;
1312
} else {
14-
ed = Math.max(ed, e[1]);
13+
ed = Math.max(ed, e);
1514
}
1615
}
17-
if (st != -1) {
18-
res.add(new int[]{st, ed});
19-
}
20-
return res.toArray(new int[res.size()][]);
16+
ans.add(new int[]{st, ed});
17+
return ans.toArray(new int[ans.size()][]);
2118
}
2219
}

0 commit comments

Comments
 (0)