Skip to content

Commit 368e70e

Browse files
committed
+ problem 435
1 parent cab2923 commit 368e70e

File tree

5 files changed

+140
-0
lines changed

5 files changed

+140
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# 435. Non-overlapping Intervals
2+
Given an array of intervals `intervals` where <code>intervals[i] = [start<sub>i</sub>, end<sub>i</sub>]</code>, return *the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping*.
3+
4+
#### Example 1:
5+
<pre>
6+
<strong>Input:</strong> intervals = [[1,2],[2,3],[3,4],[1,3]]
7+
<strong>Output:</strong> 1
8+
<strong>Explanation:</strong> [1,3] can be removed and the rest of the intervals are non-overlapping.
9+
</pre>
10+
11+
#### Example 2:
12+
<pre>
13+
<strong>Input:</strong> intervals = [[1,2],[1,2],[1,2]]
14+
<strong>Output:</strong> 2
15+
<strong>Explanation:</strong> You need to remove two [1,2] to make the rest of the intervals non-overlapping.
16+
</pre>
17+
18+
#### Example 3:
19+
<pre>
20+
<strong>Input:</strong> intervals = [[1,2],[2,3]]
21+
<strong>Output:</strong> 0
22+
<strong>Explanation:</strong> You don't need to remove any of the intervals since they're already non-overlapping.
23+
</pre>
24+
25+
#### Constraints:
26+
* <code>1 <= intervals.length <= 105</sup></code>
27+
* `intervals[i].length == 2`
28+
* <code>-5 * 10<sup>4</sup> <= start<sub>i</sub> < end<sub>i</sub> <= 5 * 10<sup>4</sup></code>
29+
30+
## Solutions (Rust)
31+
32+
### 1. Solution
33+
```Rust
34+
impl Solution {
35+
pub fn erase_overlap_intervals(intervals: Vec<Vec<i32>>) -> i32 {
36+
let mut intervals = intervals;
37+
let mut stack = vec![];
38+
39+
intervals.sort_unstable();
40+
41+
for i in 0..intervals.len() {
42+
let (start0, end0) = (intervals[i][0], intervals[i][1]);
43+
let &(start1, end1) = stack.last().unwrap_or(&(0, start0));
44+
45+
if start0 >= end1 {
46+
stack.push((start0, end0));
47+
} else if end0 <= end1 {
48+
stack.pop();
49+
stack.push((start0, end0));
50+
}
51+
}
52+
53+
(intervals.len() - stack.len()) as i32
54+
}
55+
}
56+
```
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# 435. 无重叠区间
2+
给定一个区间的集合 `intervals` ,其中 <code>intervals[i] = [start<sub>i</sub>, end<sub>i</sub>]</code> 。返回 *需要移除区间的最小数量,使剩余区间互不重叠*
3+
4+
#### 示例 1:
5+
<pre>
6+
<strong>输入:</strong> intervals = [[1,2],[2,3],[3,4],[1,3]]
7+
<strong>输出:</strong> 1
8+
<strong>解释:</strong> 移除 [1,3] 后,剩下的区间没有重叠。
9+
</pre>
10+
11+
#### 示例 2:
12+
<pre>
13+
<strong>输入:</strong> intervals = [[1,2],[1,2],[1,2]]
14+
<strong>输出:</strong> 2
15+
<strong>解释:</strong> 你需要移除两个 [1,2] 来使剩下的区间没有重叠。
16+
</pre>
17+
18+
#### 示例 3:
19+
<pre>
20+
<strong>输入:</strong> intervals = [[1,2],[2,3]]
21+
<strong>输出:</strong> 0
22+
<strong>解释:</strong> 你不需要移除任何区间,因为它们已经是无重叠的了。
23+
</pre>
24+
25+
#### 提示:
26+
* <code>1 <= intervals.length <= 105</sup></code>
27+
* `intervals[i].length == 2`
28+
* <code>-5 * 10<sup>4</sup> <= start<sub>i</sub> < end<sub>i</sub> <= 5 * 10<sup>4</sup></code>
29+
30+
## 题解 (Rust)
31+
32+
### 1. 题解
33+
```Rust
34+
impl Solution {
35+
pub fn erase_overlap_intervals(intervals: Vec<Vec<i32>>) -> i32 {
36+
let mut intervals = intervals;
37+
let mut stack = vec![];
38+
39+
intervals.sort_unstable();
40+
41+
for i in 0..intervals.len() {
42+
let (start0, end0) = (intervals[i][0], intervals[i][1]);
43+
let &(start1, end1) = stack.last().unwrap_or(&(0, start0));
44+
45+
if start0 >= end1 {
46+
stack.push((start0, end0));
47+
} else if end0 <= end1 {
48+
stack.pop();
49+
stack.push((start0, end0));
50+
}
51+
}
52+
53+
(intervals.len() - stack.len()) as i32
54+
}
55+
}
56+
```
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
impl Solution {
2+
pub fn erase_overlap_intervals(intervals: Vec<Vec<i32>>) -> i32 {
3+
let mut intervals = intervals;
4+
let mut stack = vec![];
5+
6+
intervals.sort_unstable();
7+
8+
for i in 0..intervals.len() {
9+
let (start0, end0) = (intervals[i][0], intervals[i][1]);
10+
let &(start1, end1) = stack.last().unwrap_or(&(0, start0));
11+
12+
if start0 >= end1 {
13+
stack.push((start0, end0));
14+
} else if end0 <= end1 {
15+
stack.pop();
16+
stack.push((start0, end0));
17+
}
18+
}
19+
20+
(intervals.len() - stack.len()) as i32
21+
}
22+
}

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@
256256
[430][430l] |[Flatten a Multilevel Doubly Linked List][430] |![rb]
257257
[433][433l] |[Minimum Genetic Mutation][433] |![py]&nbsp;&nbsp;![rb]
258258
[434][434l] |[Number of Segments in a String][434] |![py]
259+
[435][435l] |[Non-overlapping Intervals][435] |![rs]
259260
[436][436l] |[Find Right Interval][436] |![rb]&nbsp;&nbsp;![rs]
260261
[437][437l] |[Path Sum III][437] |![py]
261262
[438][438l] |[Find All Anagrams in a String][438] |![rb]&nbsp;&nbsp;![rs]
@@ -1563,6 +1564,7 @@
15631564
[430]:Problemset/0430-Flatten%20a%20Multilevel%20Doubly%20Linked%20List/README.md#430-flatten-a-multilevel-doubly-linked-list
15641565
[433]:Problemset/0433-Minimum%20Genetic%20Mutation/README.md#433-minimum-genetic-mutation
15651566
[434]:Problemset/0434-Number%20of%20Segments%20in%20a%20String/README.md#434-number-of-segments-in-a-string
1567+
[435]:Problemset/0435-Non-overlapping%20Intervals/README.md#435-non-overlapping-intervals
15661568
[436]:Problemset/0436-Find%20Right%20Interval/README.md#436-find-right-interval
15671569
[437]:Problemset/0437-Path%20Sum%20III/README.md#437-path-sum-iii
15681570
[438]:Problemset/0438-Find%20All%20Anagrams%20in%20a%20String/README.md#438-find-all-anagrams-in-a-string
@@ -2870,6 +2872,7 @@
28702872
[430l]:https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list/
28712873
[433l]:https://leetcode.com/problems/minimum-genetic-mutation/
28722874
[434l]:https://leetcode.com/problems/number-of-segments-in-a-string/
2875+
[435l]:https://leetcode.com/problems/non-overlapping-intervals/
28732876
[436l]:https://leetcode.com/problems/find-right-interval/
28742877
[437l]:https://leetcode.com/problems/path-sum-iii/
28752878
[438l]:https://leetcode.com/problems/find-all-anagrams-in-a-string/

README_CN.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@
256256
[430][430l] |[扁平化多级双向链表][430] |![rb]
257257
[433][433l] |[最小基因变化][433] |![py]&nbsp;&nbsp;![rb]
258258
[434][434l] |[字符串中的单词数][434] |![py]
259+
[435][435l] |[无重叠区间][435] |![rs]
259260
[436][436l] |[寻找右区间][436] |![rb]&nbsp;&nbsp;![rs]
260261
[437][437l] |[路径总和 III][437] |![py]
261262
[438][438l] |[找到字符串中所有字母异位词][438] |![rb]&nbsp;&nbsp;![rs]
@@ -1563,6 +1564,7 @@
15631564
[430]:Problemset/0430-Flatten%20a%20Multilevel%20Doubly%20Linked%20List/README_CN.md#430-扁平化多级双向链表
15641565
[433]:Problemset/0433-Minimum%20Genetic%20Mutation/README_CN.md#433-最小基因变化
15651566
[434]:Problemset/0434-Number%20of%20Segments%20in%20a%20String/README_CN.md#434-字符串中的单词数
1567+
[435]:Problemset/0435-Non-overlapping%20Intervals/README_CN.md#435-无重叠区间
15661568
[436]:Problemset/0436-Find%20Right%20Interval/README_CN.md#436-寻找右区间
15671569
[437]:Problemset/0437-Path%20Sum%20III/README_CN.md#437-路径总和-iii
15681570
[438]:Problemset/0438-Find%20All%20Anagrams%20in%20a%20String/README_CN.md#438-找到字符串中所有字母异位词
@@ -2870,6 +2872,7 @@
28702872
[430l]:https://leetcode.cn/problems/flatten-a-multilevel-doubly-linked-list/
28712873
[433l]:https://leetcode.cn/problems/minimum-genetic-mutation/
28722874
[434l]:https://leetcode.cn/problems/number-of-segments-in-a-string/
2875+
[435l]:https://leetcode.cn/problems/non-overlapping-intervals/
28732876
[436l]:https://leetcode.cn/problems/find-right-interval/
28742877
[437l]:https://leetcode.cn/problems/path-sum-iii/
28752878
[438l]:https://leetcode.cn/problems/find-all-anagrams-in-a-string/

0 commit comments

Comments
 (0)