File tree 8 files changed +160
-6
lines changed
0000-0099/0005.Longest Palindromic Substring
0400-0499/0435.Non-overlapping Intervals
8 files changed +160
-6
lines changed Original file line number Diff line number Diff line change @@ -79,7 +79,7 @@ class Solution:
79
79
dp[i][j] = dp[i + 1 ][j - 1 ] and s[i] == s[j]
80
80
if dp[i][j] and mx < j - i + 1 :
81
81
start, mx = i, j - i + 1
82
- return s[start:start+ mx]
82
+ return s[start:start + mx]
83
83
```
84
84
85
85
### ** Java**
Original file line number Diff line number Diff line change @@ -101,7 +101,7 @@ class Solution:
101
101
dp[i][j] = dp[i + 1 ][j - 1 ] and s[i] == s[j]
102
102
if dp[i][j] and mx < j - i + 1 :
103
103
start, mx = i, j - i + 1
104
- return s[start:start+ mx]
104
+ return s[start:start + mx]
105
105
```
106
106
107
107
### ** Java**
Original file line number Diff line number Diff line change @@ -11,4 +11,4 @@ def longestPalindrome(self, s: str) -> str:
11
11
dp [i ][j ] = dp [i + 1 ][j - 1 ] and s [i ] == s [j ]
12
12
if dp [i ][j ] and mx < j - i + 1 :
13
13
start , mx = i , j - i + 1
14
- return s [start :start + mx ]
14
+ return s [start :start + mx ]
Original file line number Diff line number Diff line change 45
45
<strong >解释:</strong > 你不需要移除任何区间,因为它们已经是无重叠的了。
46
46
</pre >
47
47
48
-
49
48
## 解法
50
49
51
50
<!-- 这里可写通用的实现逻辑 -->
52
51
52
+ 贪心。
53
+
54
+ 先按照区间右边界排序。优先选择最小的区间的右边界作为起始边界。遍历区间:
55
+
56
+ - 若当前区间左边界大于等于起始右边界,说明该区间无需移除,直接更新起始右边界;
57
+ - 否则说明该区间需要移除,更新移除区间的数量 cnt。
58
+
59
+ 最后返回 cnt 即可。
60
+
53
61
<!-- tabs:start -->
54
62
55
63
### ** Python3**
56
64
57
65
<!-- 这里可写当前语言的特殊实现逻辑 -->
58
66
59
67
``` 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
61
80
```
62
81
63
82
### ** Java**
64
83
65
84
<!-- 这里可写当前语言的特殊实现逻辑 -->
66
85
67
86
``` 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
+ ```
68
105
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
+ }
69
126
```
70
127
71
128
### ** ...**
Original file line number Diff line number Diff line change 43
43
44
44
## Solutions
45
45
46
+ Greedy.
47
+
46
48
<!-- tabs:start -->
47
49
48
50
### ** Python3**
49
51
50
52
``` 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
52
65
```
53
66
54
67
### ** Java**
55
68
56
69
``` 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
+ ```
57
88
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
+ }
58
109
```
59
110
60
111
### ** ...**
Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments