Skip to content

Commit cd45f03

Browse files
committed
feat: add solutions to lc problem: No.0435. Non-overlapping Intervals
1 parent 0a32aeb commit cd45f03

File tree

8 files changed

+160
-6
lines changed

8 files changed

+160
-6
lines changed

solution/0000-0099/0005.Longest Palindromic Substring/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class Solution:
7979
dp[i][j] = dp[i + 1][j - 1] and s[i] == s[j]
8080
if dp[i][j] and mx < j - i + 1:
8181
start, mx = i, j - i + 1
82-
return s[start:start+mx]
82+
return s[start:start + mx]
8383
```
8484

8585
### **Java**

solution/0000-0099/0005.Longest Palindromic Substring/README_EN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class Solution:
101101
dp[i][j] = dp[i + 1][j - 1] and s[i] == s[j]
102102
if dp[i][j] and mx < j - i + 1:
103103
start, mx = i, j - i + 1
104-
return s[start:start+mx]
104+
return s[start:start + mx]
105105
```
106106

107107
### **Java**

solution/0000-0099/0005.Longest Palindromic Substring/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ def longestPalindrome(self, s: str) -> str:
1111
dp[i][j] = dp[i + 1][j - 1] and s[i] == s[j]
1212
if dp[i][j] and mx < j - i + 1:
1313
start, mx = i, j - i + 1
14-
return s[start:start+mx]
14+
return s[start:start + mx]

solution/0400-0499/0435.Non-overlapping Intervals/README.md

+59-2
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,84 @@
4545
<strong>解释:</strong> 你不需要移除任何区间,因为它们已经是无重叠的了。
4646
</pre>
4747

48-
4948
## 解法
5049

5150
<!-- 这里可写通用的实现逻辑 -->
5251

52+
贪心。
53+
54+
先按照区间右边界排序。优先选择最小的区间的右边界作为起始边界。遍历区间:
55+
56+
- 若当前区间左边界大于等于起始右边界,说明该区间无需移除,直接更新起始右边界;
57+
- 否则说明该区间需要移除,更新移除区间的数量 cnt。
58+
59+
最后返回 cnt 即可。
60+
5361
<!-- tabs:start -->
5462

5563
### **Python3**
5664

5765
<!-- 这里可写当前语言的特殊实现逻辑 -->
5866

5967
```python
60-
68+
class Solution:
69+
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
70+
if not intervals:
71+
return 0
72+
intervals.sort(key=lambda x: x[1])
73+
cnt, end = 0, intervals[0][1]
74+
for interval in intervals[1:]:
75+
if interval[0] >= end:
76+
end = interval[1]
77+
else:
78+
cnt += 1
79+
return cnt
6180
```
6281

6382
### **Java**
6483

6584
<!-- 这里可写当前语言的特殊实现逻辑 -->
6685

6786
```java
87+
class Solution {
88+
public int eraseOverlapIntervals(int[][] intervals) {
89+
if (intervals == null || intervals.length == 0) {
90+
return 0;
91+
}
92+
Arrays.sort(intervals, Comparator.comparingInt(a -> a[1]));
93+
int end = intervals[0][1], cnt = 0;
94+
for (int i = 1; i < intervals.length; ++i) {
95+
if (intervals[i][0] >= end) {
96+
end = intervals[i][1];
97+
} else {
98+
++cnt;
99+
}
100+
}
101+
return cnt;
102+
}
103+
}
104+
```
68105

106+
### **Go**
107+
108+
```go
109+
func eraseOverlapIntervals(intervals [][]int) int {
110+
if intervals == nil || len(intervals) == 0 {
111+
return 0
112+
}
113+
sort.Slice(intervals, func(i, j int) bool {
114+
return intervals[i][1] < intervals[j][1]
115+
})
116+
end, cnt := intervals[0][1], 0
117+
for i := 1; i < len(intervals); i++ {
118+
if intervals[i][0] >= end {
119+
end = intervals[i][1]
120+
} else {
121+
cnt++
122+
}
123+
}
124+
return cnt
125+
}
69126
```
70127

71128
### **...**

solution/0400-0499/0435.Non-overlapping Intervals/README_EN.md

+52-1
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,69 @@
4343

4444
## Solutions
4545

46+
Greedy.
47+
4648
<!-- tabs:start -->
4749

4850
### **Python3**
4951

5052
```python
51-
53+
class Solution:
54+
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
55+
if not intervals:
56+
return 0
57+
intervals.sort(key=lambda x: x[1])
58+
cnt, end = 0, intervals[0][1]
59+
for interval in intervals[1:]:
60+
if interval[0] >= end:
61+
end = interval[1]
62+
else:
63+
cnt += 1
64+
return cnt
5265
```
5366

5467
### **Java**
5568

5669
```java
70+
class Solution {
71+
public int eraseOverlapIntervals(int[][] intervals) {
72+
if (intervals == null || intervals.length == 0) {
73+
return 0;
74+
}
75+
Arrays.sort(intervals, Comparator.comparingInt(a -> a[1]));
76+
int end = intervals[0][1], cnt = 0;
77+
for (int i = 1; i < intervals.length; ++i) {
78+
if (intervals[i][0] >= end) {
79+
end = intervals[i][1];
80+
} else {
81+
++cnt;
82+
}
83+
}
84+
return cnt;
85+
}
86+
}
87+
```
5788

89+
### **Go**
90+
91+
```go
92+
func eraseOverlapIntervals(intervals [][]int) int {
93+
if intervals == nil || len(intervals) == 0 {
94+
return 0
95+
}
96+
sort.Slice(intervals, func(i, j int) bool {
97+
return intervals[i][1] < intervals[j][1]
98+
})
99+
end, cnt := intervals[0][1], 0
100+
for i := 1; i < len(intervals); i++ {
101+
if intervals[i][0] >= end {
102+
end = intervals[i][1]
103+
} else {
104+
cnt++
105+
}
106+
}
107+
return cnt
108+
}
58109
```
59110

60111
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
func eraseOverlapIntervals(intervals [][]int) int {
2+
if intervals == nil || len(intervals) == 0 {
3+
return 0
4+
}
5+
sort.Slice(intervals, func(i, j int) bool {
6+
return intervals[i][1] < intervals[j][1]
7+
})
8+
end, cnt := intervals[0][1], 0
9+
for i := 1; i < len(intervals); i++ {
10+
if intervals[i][0] >= end {
11+
end = intervals[i][1]
12+
} else {
13+
cnt++
14+
}
15+
}
16+
return cnt
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int eraseOverlapIntervals(int[][] intervals) {
3+
if (intervals == null || intervals.length == 0) {
4+
return 0;
5+
}
6+
Arrays.sort(intervals, Comparator.comparingInt(a -> a[1]));
7+
int end = intervals[0][1], cnt = 0;
8+
for (int i = 1; i < intervals.length; ++i) {
9+
if (intervals[i][0] >= end) {
10+
end = intervals[i][1];
11+
} else {
12+
++cnt;
13+
}
14+
}
15+
return cnt;
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
3+
if not intervals:
4+
return 0
5+
intervals.sort(key=lambda x: x[1])
6+
cnt, end = 0, intervals[0][1]
7+
for interval in intervals[1:]:
8+
if interval[0] >= end:
9+
end = interval[1]
10+
else:
11+
cnt += 1
12+
return cnt

0 commit comments

Comments
 (0)