Skip to content

Commit f4e5b35

Browse files
committedAug 16, 2021
feat: add solutions to lc problem: No.1288.Remove Covered Intervals
1 parent 1d34870 commit f4e5b35

File tree

6 files changed

+209
-31
lines changed

6 files changed

+209
-31
lines changed
 

Diff for: ‎solution/1200-1299/1288.Remove Covered Intervals/README.md

+75-2
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,100 @@
3232
<li>对于所有的&nbsp;<code>i != j</code>:<code>intervals[i] != intervals[j]</code></li>
3333
</ul>
3434

35-
3635
## 解法
3736

3837
<!-- 这里可写通用的实现逻辑 -->
3938

39+
对起点按升序排列,若起点相同,则对终点按降序排列。
40+
41+
设 cnt 表示没有被覆盖的区间数,初始化为 1,pre 表示前一个未被覆盖的区间,初始化为 `intervals[0]`
42+
43+
从下标 1 开始遍历区间列表,若 `pre[1] < intervals[i][1]`,说明当前区间不被前一个区间覆盖,`cnt++`,并且更新 pre 为 `intervals[i]`。否则表示当前区间被前一个区间覆盖,不做任何操作。
44+
45+
最后返回 cnt 即可。
46+
4047
<!-- tabs:start -->
4148

4249
### **Python3**
4350

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

4653
```python
47-
54+
class Solution:
55+
def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:
56+
intervals.sort(key=lambda x: (x[0], -x[1]))
57+
cnt, pre = 1, intervals[0]
58+
for e in intervals[1:]:
59+
if pre[1] < e[1]:
60+
cnt += 1
61+
pre = e
62+
return cnt
4863
```
4964

5065
### **Java**
5166

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

5469
```java
70+
class Solution {
71+
public int removeCoveredIntervals(int[][] intervals) {
72+
Arrays.sort(intervals, (a, b) -> a[0] - b[0] == 0 ? b[1] - a[1] : a[0] - b[0]);
73+
int[] pre = intervals[0];
74+
int cnt = 1;
75+
for (int i = 1; i < intervals.length; ++i) {
76+
if (pre[1] < intervals[i][1]) {
77+
++cnt;
78+
pre = intervals[i];
79+
}
80+
}
81+
return cnt;
82+
}
83+
}
84+
```
85+
86+
### **C++**
87+
88+
```cpp
89+
class Solution {
90+
public:
91+
int removeCoveredIntervals(vector<vector<int>> &intervals) {
92+
sort(intervals.begin(), intervals.end(), [](const vector<int> &a, const vector<int> &b)
93+
{ return a[0] == b[0] ? b[1] < a[1] : a[0] < b[0]; });
94+
int cnt = 1;
95+
vector<int> pre = intervals[0];
96+
for (int i = 1; i < intervals.size(); ++i)
97+
{
98+
if (pre[1] < intervals[i][1])
99+
{
100+
++cnt;
101+
pre = intervals[i];
102+
}
103+
}
104+
return cnt;
105+
}
106+
};
107+
```
55108
109+
### **Go**
110+
111+
```go
112+
func removeCoveredIntervals(intervals [][]int) int {
113+
sort.Slice(intervals, func(i, j int) bool {
114+
if intervals[i][0] == intervals[j][0] {
115+
return intervals[j][1] < intervals[i][1]
116+
}
117+
return intervals[i][0] < intervals[j][0]
118+
})
119+
cnt := 1
120+
pre := intervals[0]
121+
for i := 1; i < len(intervals); i++ {
122+
if pre[1] < intervals[i][1] {
123+
cnt++
124+
pre = intervals[i]
125+
}
126+
}
127+
return cnt
128+
}
56129
```
57130

58131
### **...**

Diff for: ‎solution/1200-1299/1288.Remove Covered Intervals/README_EN.md

+76-29
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,14 @@
66

77
<p>Given a list of <code>intervals</code>, remove all intervals that are covered by another interval in the list.</p>
88

9-
10-
119
<p>Interval <code>[a,b)</code> is covered by&nbsp;interval <code>[c,d)</code> if and only if <code>c &lt;= a</code> and <code>b &lt;= d</code>.</p>
1210

13-
14-
1511
<p>After doing so, return <em>the number of remaining intervals</em>.</p>
1612

17-
18-
1913
<p>&nbsp;</p>
2014

2115
<p><strong>Example 1:</strong></p>
2216

23-
24-
2517
<pre>
2618

2719
<strong>Input:</strong> intervals = [[1,4],[3,6],[2,8]]
@@ -32,12 +24,8 @@
3224

3325
</pre>
3426

35-
36-
3727
<p><strong>Example 2:</strong></p>
3828

39-
40-
4129
<pre>
4230

4331
<strong>Input:</strong> intervals = [[1,4],[2,3]]
@@ -46,12 +34,8 @@
4634

4735
</pre>
4836

49-
50-
5137
<p><strong>Example 3:</strong></p>
5238

53-
54-
5539
<pre>
5640

5741
<strong>Input:</strong> intervals = [[0,10],[5,12]]
@@ -60,12 +44,8 @@
6044

6145
</pre>
6246

63-
64-
6547
<p><strong>Example 4:</strong></p>
6648

67-
68-
6949
<pre>
7050

7151
<strong>Input:</strong> intervals = [[3,10],[4,10],[5,11]]
@@ -74,12 +54,8 @@
7454

7555
</pre>
7656

77-
78-
7957
<p><strong>Example 5:</strong></p>
8058

81-
82-
8359
<pre>
8460

8561
<strong>Input:</strong> intervals = [[1,2],[1,4],[3,4]]
@@ -88,14 +64,10 @@
8864

8965
</pre>
9066

91-
92-
9367
<p>&nbsp;</p>
9468

9569
<p><strong>Constraints:</strong></p>
9670

97-
98-
9971
<ul>
10072
<li><code>1 &lt;= intervals.length &lt;= 1000</code></li>
10173
<li><code>intervals[i].length == 2</code></li>
@@ -105,18 +77,93 @@
10577

10678
## Solutions
10779

80+
- Sort `intervals` by increasing of `startTime` and decreasing of `endTime`.
81+
- `cnt = 1`: `cnt` is the result.
82+
- `pre = intervals[0]`: `pre` is the last interval
83+
- For each `interval` in `intervals`
84+
- if `pre.endTime < interval.endTime`, means `interval` is not overlapped then we count `cnt`, and update `pre = interval`
85+
- else we do nothing
86+
- Return `cnt`
87+
88+
10889
<!-- tabs:start -->
10990

11091
### **Python3**
11192

11293
```python
113-
94+
class Solution:
95+
def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:
96+
intervals.sort(key=lambda x: (x[0], -x[1]))
97+
cnt, pre = 1, intervals[0]
98+
for e in intervals[1:]:
99+
if pre[1] < e[1]:
100+
cnt += 1
101+
pre = e
102+
return cnt
114103
```
115104

116105
### **Java**
117106

118107
```java
108+
class Solution {
109+
public int removeCoveredIntervals(int[][] intervals) {
110+
Arrays.sort(intervals, (a, b) -> a[0] - b[0] == 0 ? b[1] - a[1] : a[0] - b[0]);
111+
int[] pre = intervals[0];
112+
int cnt = 1;
113+
for (int i = 1; i < intervals.length; ++i) {
114+
if (pre[1] < intervals[i][1]) {
115+
++cnt;
116+
pre = intervals[i];
117+
}
118+
}
119+
return cnt;
120+
}
121+
}
122+
```
123+
124+
### **C++**
125+
126+
```cpp
127+
class Solution {
128+
public:
129+
int removeCoveredIntervals(vector<vector<int>> &intervals) {
130+
sort(intervals.begin(), intervals.end(), [](const vector<int> &a, const vector<int> &b)
131+
{ return a[0] == b[0] ? b[1] < a[1] : a[0] < b[0]; });
132+
int cnt = 1;
133+
vector<int> pre = intervals[0];
134+
for (int i = 1; i < intervals.size(); ++i)
135+
{
136+
if (pre[1] < intervals[i][1])
137+
{
138+
++cnt;
139+
pre = intervals[i];
140+
}
141+
}
142+
return cnt;
143+
}
144+
};
145+
```
119146
147+
### **Go**
148+
149+
```go
150+
func removeCoveredIntervals(intervals [][]int) int {
151+
sort.Slice(intervals, func(i, j int) bool {
152+
if intervals[i][0] == intervals[j][0] {
153+
return intervals[j][1] < intervals[i][1]
154+
}
155+
return intervals[i][0] < intervals[j][0]
156+
})
157+
cnt := 1
158+
pre := intervals[0]
159+
for i := 1; i < len(intervals); i++ {
160+
if pre[1] < intervals[i][1] {
161+
cnt++
162+
pre = intervals[i]
163+
}
164+
}
165+
return cnt
166+
}
120167
```
121168

122169
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
int removeCoveredIntervals(vector<vector<int>> &intervals) {
4+
sort(intervals.begin(), intervals.end(), [](const vector<int> &a, const vector<int> &b)
5+
{ return a[0] == b[0] ? b[1] < a[1] : a[0] < b[0]; });
6+
int cnt = 1;
7+
vector<int> pre = intervals[0];
8+
for (int i = 1; i < intervals.size(); ++i)
9+
{
10+
if (pre[1] < intervals[i][1])
11+
{
12+
++cnt;
13+
pre = intervals[i];
14+
}
15+
}
16+
return cnt;
17+
}
18+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
func removeCoveredIntervals(intervals [][]int) int {
2+
sort.Slice(intervals, func(i, j int) bool {
3+
if intervals[i][0] == intervals[j][0] {
4+
return intervals[j][1] < intervals[i][1]
5+
}
6+
return intervals[i][0] < intervals[j][0]
7+
})
8+
cnt := 1
9+
pre := intervals[0]
10+
for i := 1; i < len(intervals); i++ {
11+
if pre[1] < intervals[i][1] {
12+
cnt++
13+
pre = intervals[i]
14+
}
15+
}
16+
return cnt
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public int removeCoveredIntervals(int[][] intervals) {
3+
Arrays.sort(intervals, (a, b) -> a[0] - b[0] == 0 ? b[1] - a[1] : a[0] - b[0]);
4+
int[] pre = intervals[0];
5+
int cnt = 1;
6+
for (int i = 1; i < intervals.length; ++i) {
7+
if (pre[1] < intervals[i][1]) {
8+
++cnt;
9+
pre = intervals[i];
10+
}
11+
}
12+
return cnt;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:
3+
intervals.sort(key=lambda x: (x[0], -x[1]))
4+
cnt, pre = 1, intervals[0]
5+
for e in intervals[1:]:
6+
if pre[1] < e[1]:
7+
cnt += 1
8+
pre = e
9+
return cnt

0 commit comments

Comments
 (0)
Please sign in to comment.