Skip to content

Commit 73d175d

Browse files
committed
feat: add solutions to lc problem: No.1893
No.1893.Check if All the Integers in a Range Are Covered
1 parent 99c462a commit 73d175d

File tree

8 files changed

+206
-110
lines changed

8 files changed

+206
-110
lines changed

solution/1800-1899/1893.Check if All the Integers in a Range Are Covered/README.md

Lines changed: 81 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,15 @@
4747

4848
<!-- 这里可写通用的实现逻辑 -->
4949

50-
利用差分数组进行区间更新。
50+
**方法一:差分数组**
51+
52+
我们可以使用差分数组的思想,对于每个区间 $[l, r]$,我们将 $diff[l]$ 加 $1$,将 $diff[r + 1]$ 减 $1$。
53+
54+
最后遍历差分数组,累加每个位置的值,记为 $cur$,如果 $left \le i \le right$ 且 $cur = 0$,则说明 $i$ 没有被任何区间覆盖,返回 `false`
55+
56+
否则遍历结束后,返回 `true`
57+
58+
时间复杂度 $O(n + M)$,空间复杂度 $O(M)$。其中 $n$ 和 $M$ 分别为区间的数量和区间的范围。
5159

5260
<!-- tabs:start -->
5361

@@ -63,8 +71,8 @@ class Solution:
6371
diff[l] += 1
6472
diff[r + 1] -= 1
6573
cur = 0
66-
for i, df in enumerate(diff):
67-
cur += df
74+
for i, x in enumerate(diff):
75+
cur += x
6876
if left <= i <= right and cur == 0:
6977
return False
7078
return True
@@ -79,13 +87,14 @@ class Solution {
7987
public boolean isCovered(int[][] ranges, int left, int right) {
8088
int[] diff = new int[52];
8189
for (int[] range : ranges) {
82-
diff[range[0]]++;
83-
diff[range[1] + 1]--;
90+
int l = range[0], r = range[1];
91+
++diff[l];
92+
--diff[r + 1];
8493
}
8594
int cur = 0;
86-
for (int i = 0; i < 52; i++) {
95+
for (int i = 0; i < diff.length; ++i) {
8796
cur += diff[i];
88-
if (left <= i && i <= right && cur == 0) {
97+
if (i >= left && i <= right && cur == 0) {
8998
return false;
9099
}
91100
}
@@ -94,64 +103,94 @@ class Solution {
94103
}
95104
```
96105

97-
### **TypeScript**
106+
### **C++**
98107

99-
```ts
100-
function isCovered(ranges: number[][], left: number, right: number): boolean {
101-
let diff = new Array(52).fill(0);
102-
for (let [start, end] of ranges) {
103-
++diff[start];
104-
--diff[end + 1];
105-
}
106-
let cur = 0;
107-
for (let i = 1; i <= 50; i++) {
108-
cur += diff[i];
109-
if (i >= left && i <= right && cur <= 0) {
110-
return false;
108+
```cpp
109+
class Solution {
110+
public:
111+
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
112+
int diff[52]{};
113+
for (auto& range : ranges) {
114+
int l = range[0], r = range[1];
115+
++diff[l];
116+
--diff[r + 1];
111117
}
118+
int cur = 0;
119+
for (int i = 0; i < 52; ++i) {
120+
cur += diff[i];
121+
if (i >= left && i <= right && cur <= 0) {
122+
return false;
123+
}
124+
}
125+
return true;
112126
}
113-
return true;
114-
}
127+
};
115128
```
116129
117130
### **Go**
118131
119132
```go
120133
func isCovered(ranges [][]int, left int, right int) bool {
121-
diff := make([]int, 52)
134+
diff := [52]int{}
122135
for _, rg := range ranges {
123-
diff[rg[0]]++
124-
diff[rg[1]+1]--
136+
l, r := rg[0], rg[1]
137+
diff[l]++
138+
diff[r+1]--
125139
}
126140
cur := 0
127-
for i, df := range diff {
128-
cur += df
129-
if i >= left && i <= right && cur == 0 {
141+
for i, x := range diff {
142+
cur += x
143+
if i >= left && i <= right && cur <= 0 {
130144
return false
131145
}
132146
}
133147
return true
134148
}
135149
```
136150

137-
### **C++**
151+
### **TypeScript**
138152

139-
```cpp
140-
class Solution {
141-
public:
142-
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
143-
vector<int> d(52);
144-
for (auto& e : ranges) {
145-
++d[e[0]];
146-
--d[e[1] + 1];
153+
```ts
154+
function isCovered(ranges: number[][], left: number, right: number): boolean {
155+
const diff = new Array(52).fill(0);
156+
for (const [l, r] of ranges) {
157+
++diff[l];
158+
--diff[r + 1];
159+
}
160+
let cur = 0;
161+
for (let i = 0; i < 52; ++i) {
162+
cur += diff[i];
163+
if (i >= left && i <= right && cur <= 0) {
164+
return false;
147165
}
148-
int s = 0;
149-
for (int i = 0; i < d.size(); ++i) {
150-
s += d[i];
151-
if (left <= i && i <= right && s == 0) return false;
166+
}
167+
return true;
168+
}
169+
```
170+
171+
### **JavaScript**
172+
173+
```js
174+
/**
175+
* @param {number[][]} ranges
176+
* @param {number} left
177+
* @param {number} right
178+
* @return {boolean}
179+
*/
180+
var isCovered = function (ranges, left, right) {
181+
const diff = new Array(52).fill(0);
182+
for (const [l, r] of ranges) {
183+
++diff[l];
184+
--diff[r + 1];
185+
}
186+
let cur = 0;
187+
for (let i = 0; i < 52; ++i) {
188+
cur += diff[i];
189+
if (i >= left && i <= right && cur <= 0) {
190+
return false;
152191
}
153-
return true;
154192
}
193+
return true;
155194
};
156195
```
157196

solution/1800-1899/1893.Check if All the Integers in a Range Are Covered/README_EN.md

Lines changed: 72 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ class Solution:
5555
diff[l] += 1
5656
diff[r + 1] -= 1
5757
cur = 0
58-
for i, df in enumerate(diff):
59-
cur += df
58+
for i, x in enumerate(diff):
59+
cur += x
6060
if left <= i <= right and cur == 0:
6161
return False
6262
return True
@@ -69,13 +69,14 @@ class Solution {
6969
public boolean isCovered(int[][] ranges, int left, int right) {
7070
int[] diff = new int[52];
7171
for (int[] range : ranges) {
72-
diff[range[0]]++;
73-
diff[range[1] + 1]--;
72+
int l = range[0], r = range[1];
73+
++diff[l];
74+
--diff[r + 1];
7475
}
7576
int cur = 0;
76-
for (int i = 0; i < 52; i++) {
77+
for (int i = 0; i < diff.length; ++i) {
7778
cur += diff[i];
78-
if (left <= i && i <= right && cur == 0) {
79+
if (i >= left && i <= right && cur == 0) {
7980
return false;
8081
}
8182
}
@@ -84,64 +85,94 @@ class Solution {
8485
}
8586
```
8687

87-
### **TypeScript**
88+
### **C++**
8889

89-
```ts
90-
function isCovered(ranges: number[][], left: number, right: number): boolean {
91-
let diff = new Array(52).fill(0);
92-
for (let [start, end] of ranges) {
93-
++diff[start];
94-
--diff[end + 1];
95-
}
96-
let cur = 0;
97-
for (let i = 1; i <= 50; i++) {
98-
cur += diff[i];
99-
if (i >= left && i <= right && cur <= 0) {
100-
return false;
90+
```cpp
91+
class Solution {
92+
public:
93+
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
94+
int diff[52]{};
95+
for (auto& range : ranges) {
96+
int l = range[0], r = range[1];
97+
++diff[l];
98+
--diff[r + 1];
99+
}
100+
int cur = 0;
101+
for (int i = 0; i < 52; ++i) {
102+
cur += diff[i];
103+
if (i >= left && i <= right && cur <= 0) {
104+
return false;
105+
}
101106
}
107+
return true;
102108
}
103-
return true;
104-
}
109+
};
105110
```
106111
107112
### **Go**
108113
109114
```go
110115
func isCovered(ranges [][]int, left int, right int) bool {
111-
diff := make([]int, 52)
116+
diff := [52]int{}
112117
for _, rg := range ranges {
113-
diff[rg[0]]++
114-
diff[rg[1]+1]--
118+
l, r := rg[0], rg[1]
119+
diff[l]++
120+
diff[r+1]--
115121
}
116122
cur := 0
117-
for i, df := range diff {
118-
cur += df
119-
if i >= left && i <= right && cur == 0 {
123+
for i, x := range diff {
124+
cur += x
125+
if i >= left && i <= right && cur <= 0 {
120126
return false
121127
}
122128
}
123129
return true
124130
}
125131
```
126132

127-
### **C++**
133+
### **TypeScript**
128134

129-
```cpp
130-
class Solution {
131-
public:
132-
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
133-
vector<int> d(52);
134-
for (auto& e : ranges) {
135-
++d[e[0]];
136-
--d[e[1] + 1];
135+
```ts
136+
function isCovered(ranges: number[][], left: number, right: number): boolean {
137+
const diff = new Array(52).fill(0);
138+
for (const [l, r] of ranges) {
139+
++diff[l];
140+
--diff[r + 1];
141+
}
142+
let cur = 0;
143+
for (let i = 0; i < 52; ++i) {
144+
cur += diff[i];
145+
if (i >= left && i <= right && cur <= 0) {
146+
return false;
137147
}
138-
int s = 0;
139-
for (int i = 0; i < d.size(); ++i) {
140-
s += d[i];
141-
if (left <= i && i <= right && s == 0) return false;
148+
}
149+
return true;
150+
}
151+
```
152+
153+
### **JavaScript**
154+
155+
```js
156+
/**
157+
* @param {number[][]} ranges
158+
* @param {number} left
159+
* @param {number} right
160+
* @return {boolean}
161+
*/
162+
var isCovered = function (ranges, left, right) {
163+
const diff = new Array(52).fill(0);
164+
for (const [l, r] of ranges) {
165+
++diff[l];
166+
--diff[r + 1];
167+
}
168+
let cur = 0;
169+
for (let i = 0; i < 52; ++i) {
170+
cur += diff[i];
171+
if (i >= left && i <= right && cur <= 0) {
172+
return false;
142173
}
143-
return true;
144174
}
175+
return true;
145176
};
146177
```
147178

solution/1800-1899/1893.Check if All the Integers in a Range Are Covered/Solution.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
class Solution {
22
public:
33
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
4-
vector<int> d(52);
5-
for (auto& e : ranges) {
6-
++d[e[0]];
7-
--d[e[1] + 1];
4+
int diff[52]{};
5+
for (auto& range : ranges) {
6+
int l = range[0], r = range[1];
7+
++diff[l];
8+
--diff[r + 1];
89
}
9-
int s = 0;
10-
for (int i = 0; i < d.size(); ++i) {
11-
s += d[i];
12-
if (left <= i && i <= right && s == 0) return false;
10+
int cur = 0;
11+
for (int i = 0; i < 52; ++i) {
12+
cur += diff[i];
13+
if (i >= left && i <= right && cur <= 0) {
14+
return false;
15+
}
1316
}
1417
return true;
1518
}
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
func isCovered(ranges [][]int, left int, right int) bool {
2-
diff := make([]int, 52)
2+
diff := [52]int{}
33
for _, rg := range ranges {
4-
diff[rg[0]]++
5-
diff[rg[1]+1]--
4+
l, r := rg[0], rg[1]
5+
diff[l]++
6+
diff[r+1]--
67
}
78
cur := 0
8-
for i, df := range diff {
9-
cur += df
10-
if i >= left && i <= right && cur == 0 {
9+
for i, x := range diff {
10+
cur += x
11+
if i >= left && i <= right && cur <= 0 {
1112
return false
1213
}
1314
}
1415
return true
15-
}
16+
}

0 commit comments

Comments
 (0)