Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8001ba6

Browse files
feat: update solutions to lc problems: No.1893,1894 (doocs#3257)
1 parent 5d595de commit 8001ba6

File tree

12 files changed

+99
-96
lines changed

12 files changed

+99
-96
lines changed

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

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,15 @@ tags:
6565

6666
### 方法一:差分数组
6767

68-
我们可以使用差分数组的思想,对于每个区间 $[l, r],ドル我们将 $diff[l]$ 加 1ドル,ドル将 $diff[r + 1]$ 减 1ドル$。
68+
我们可以使用差分数组的思想,创建一个长度为 52ドル$ 的差分数组 $\textit{diff}$。
6969

70-
最后遍历差分数组,累加每个位置的值,记为 $cur,ドル如果 $left \le i \le right$ 且 $cur = 0,ドル则说明 $i$ 没有被任何区间覆盖,返回 `false`
70+
接下来,我们遍历数组 $\textit{ranges},ドル对于每个区间 $[l, r],ドル我们令 $\textit{diff}[l]$ 自增 1ドル,ドル而 $\textit{diff}[r + 1]$ 自减 1ドル$
7171

72-
否则遍历结束后,返回 `true`
72+
接着,我们遍历差分数组 $\textit{diff},ドル维护一个前缀和 $s,ドル对于每个位置 $i,ドル我们令 $s$ 自增 $\textit{diff}[i],ドル如果 $s \le 0$ 且 $left \le i \le right,ドル则说明区间 $[left, right]$ 中有一个整数 $i$ 没有被覆盖,返回 $\textit{false}$
7373

74-
时间复杂度 $O(n + M),ドル空间复杂度 $O(M)$。其中 $n$ 和 $M$ 分别为区间的数量和区间的范围。
74+
如果遍历完差分数组 $\textit{diff}$ 后都没有返回 $\textit{false},ドル则说明区间 $[left, right]$ 中的每个整数都被 $\textit{ranges}$ 中至少一个区间覆盖,返回 $\textit{true}$。
75+
76+
时间复杂度 $O(n + M),ドル空间复杂度 $O(M)$。其中 $n$ 是数组 $\textit{ranges}$ 的长度,而 $M$ 是区间的最大值,本题中 $M \le 50$。
7577

7678
<!-- tabs:start -->
7779

@@ -84,10 +86,10 @@ class Solution:
8486
for l, r in ranges:
8587
diff[l] += 1
8688
diff[r + 1] -= 1
87-
cur = 0
89+
s = 0
8890
for i, x in enumerate(diff):
89-
cur += x
90-
if left <= i <= right and cur ==0:
91+
s += x
92+
if s <= 0and left <= i <= right:
9193
return False
9294
return True
9395
```
@@ -103,10 +105,10 @@ class Solution {
103105
++diff[l];
104106
--diff[r + 1];
105107
}
106-
int cur = 0;
108+
int s = 0;
107109
for (int i = 0; i < diff.length; ++i) {
108-
cur += diff[i];
109-
if (i >= left && i <= right && cur ==0) {
110+
s += diff[i];
111+
if (s <=0 && left <= i && i <= right) {
110112
return false;
111113
}
112114
}
@@ -121,16 +123,16 @@ class Solution {
121123
class Solution {
122124
public:
123125
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
124-
int diff[52]{};
126+
vector<int> diff(52);
125127
for (auto& range : ranges) {
126128
int l = range[0], r = range[1];
127129
++diff[l];
128130
--diff[r + 1];
129131
}
130-
int cur = 0;
131-
for (int i = 0; i < 52; ++i) {
132-
cur += diff[i];
133-
if (i >= left && i <= right && cur <= 0) {
132+
int s = 0;
133+
for (int i = 0; i < diff.size(); ++i) {
134+
s += diff[i];
135+
if (s <= 0 && left <= i && i <= right) {
134136
return false;
135137
}
136138
}
@@ -144,15 +146,15 @@ public:
144146
```go
145147
func isCovered(ranges [][]int, left int, right int) bool {
146148
diff := [52]int{}
147-
for _, rg := range ranges {
148-
l, r := rg[0], rg[1]
149+
for _, e := range ranges {
150+
l, r := e[0], e[1]
149151
diff[l]++
150152
diff[r+1]--
151153
}
152-
cur := 0
154+
s := 0
153155
for i, x := range diff {
154-
cur += x
155-
if i >= left && i <= right && cur <= 0 {
156+
s += x
157+
if s <= 0 && left <= i && i <= right {
156158
return false
157159
}
158160
}
@@ -164,15 +166,15 @@ func isCovered(ranges [][]int, left int, right int) bool {
164166

165167
```ts
166168
function isCovered(ranges: number[][], left: number, right: number): boolean {
167-
const diff=new Array(52).fill(0);
169+
const diff:number[] = Array(52).fill(0);
168170
for (const [l, r] of ranges) {
169171
++diff[l];
170172
--diff[r + 1];
171173
}
172-
let cur = 0;
173-
for (let i = 0; i < 52; ++i) {
174-
cur += diff[i];
175-
if (i>=left && i <= right && cur <= 0) {
174+
let s = 0;
175+
for (let i = 0; i < diff.length; ++i) {
176+
s += diff[i];
177+
if (s<=0 && left <= i && i <= right) {
176178
return false;
177179
}
178180
}
@@ -190,15 +192,15 @@ function isCovered(ranges: number[][], left: number, right: number): boolean {
190192
* @return {boolean}
191193
*/
192194
var isCovered = function (ranges, left, right) {
193-
const diff = newArray(52).fill(0);
195+
const diff = Array(52).fill(0);
194196
for (const [l, r] of ranges) {
195197
++diff[l];
196198
--diff[r + 1];
197199
}
198-
let cur = 0;
199-
for (let i = 0; i < 52; ++i) {
200-
cur += diff[i];
201-
if (i >= left && i <= right && cur <= 0) {
200+
let s = 0;
201+
for (let i = 0; i < diff.length; ++i) {
202+
s += diff[i];
203+
if (s <=0 && left <= i && i <= right) {
202204
return false;
203205
}
204206
}

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

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,17 @@ tags:
6161

6262
<!-- solution:start -->
6363

64-
### Solution 1
64+
### Solution 1: Difference Array
65+
66+
We can use the idea of a difference array to create a difference array $\textit{diff}$ of length 52ドル$.
67+
68+
Next, we iterate through the array $\textit{ranges}$. For each interval $[l, r],ドル we increment $\textit{diff}[l]$ by 1ドル$ and decrement $\textit{diff}[r + 1]$ by 1ドル$.
69+
70+
Then, we iterate through the difference array $\textit{diff},ドル maintaining a prefix sum $s$. For each position $i,ドル we increment $s$ by $\textit{diff}[i]$. If $s \le 0$ and $left \le i \le right,ドル it indicates that an integer $i$ within the interval $[left, right]$ is not covered, and we return $\textit{false}$.
71+
72+
If we finish iterating through the difference array $\textit{diff}$ without returning $\textit{false},ドル it means that every integer within the interval $[left, right]$ is covered by at least one interval in $\textit{ranges},ドル and we return $\textit{true}$.
73+
74+
The time complexity is $O(n + M),ドル and the space complexity is $O(M)$. Here, $n$ is the length of the array $\textit{ranges},ドル and $M$ is the maximum value of the interval, which in this case is $M \le 50$.
6575

6676
<!-- tabs:start -->
6777

@@ -74,10 +84,10 @@ class Solution:
7484
for l, r in ranges:
7585
diff[l] += 1
7686
diff[r + 1] -= 1
77-
cur = 0
87+
s = 0
7888
for i, x in enumerate(diff):
79-
cur += x
80-
if left <= i <= right and cur ==0:
89+
s += x
90+
if s <= 0and left <= i <= right:
8191
return False
8292
return True
8393
```
@@ -93,10 +103,10 @@ class Solution {
93103
++diff[l];
94104
--diff[r + 1];
95105
}
96-
int cur = 0;
106+
int s = 0;
97107
for (int i = 0; i < diff.length; ++i) {
98-
cur += diff[i];
99-
if (i >= left && i <= right && cur ==0) {
108+
s += diff[i];
109+
if (s <=0 && left <= i && i <= right) {
100110
return false;
101111
}
102112
}
@@ -111,16 +121,16 @@ class Solution {
111121
class Solution {
112122
public:
113123
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
114-
int diff[52]{};
124+
vector<int> diff(52);
115125
for (auto& range : ranges) {
116126
int l = range[0], r = range[1];
117127
++diff[l];
118128
--diff[r + 1];
119129
}
120-
int cur = 0;
121-
for (int i = 0; i < 52; ++i) {
122-
cur += diff[i];
123-
if (i >= left && i <= right && cur <= 0) {
130+
int s = 0;
131+
for (int i = 0; i < diff.size(); ++i) {
132+
s += diff[i];
133+
if (s <= 0 && left <= i && i <= right) {
124134
return false;
125135
}
126136
}
@@ -134,15 +144,15 @@ public:
134144
```go
135145
func isCovered(ranges [][]int, left int, right int) bool {
136146
diff := [52]int{}
137-
for _, rg := range ranges {
138-
l, r := rg[0], rg[1]
147+
for _, e := range ranges {
148+
l, r := e[0], e[1]
139149
diff[l]++
140150
diff[r+1]--
141151
}
142-
cur := 0
152+
s := 0
143153
for i, x := range diff {
144-
cur += x
145-
if i >= left && i <= right && cur <= 0 {
154+
s += x
155+
if s <= 0 && left <= i && i <= right {
146156
return false
147157
}
148158
}
@@ -154,15 +164,15 @@ func isCovered(ranges [][]int, left int, right int) bool {
154164

155165
```ts
156166
function isCovered(ranges: number[][], left: number, right: number): boolean {
157-
const diff=new Array(52).fill(0);
167+
const diff:number[] = Array(52).fill(0);
158168
for (const [l, r] of ranges) {
159169
++diff[l];
160170
--diff[r + 1];
161171
}
162-
let cur = 0;
163-
for (let i = 0; i < 52; ++i) {
164-
cur += diff[i];
165-
if (i>=left && i <= right && cur <= 0) {
172+
let s = 0;
173+
for (let i = 0; i < diff.length; ++i) {
174+
s += diff[i];
175+
if (s<=0 && left <= i && i <= right) {
166176
return false;
167177
}
168178
}
@@ -180,15 +190,15 @@ function isCovered(ranges: number[][], left: number, right: number): boolean {
180190
* @return {boolean}
181191
*/
182192
var isCovered = function (ranges, left, right) {
183-
const diff = newArray(52).fill(0);
193+
const diff = Array(52).fill(0);
184194
for (const [l, r] of ranges) {
185195
++diff[l];
186196
--diff[r + 1];
187197
}
188-
let cur = 0;
189-
for (let i = 0; i < 52; ++i) {
190-
cur += diff[i];
191-
if (i >= left && i <= right && cur <= 0) {
198+
let s = 0;
199+
for (let i = 0; i < diff.length; ++i) {
200+
s += diff[i];
201+
if (s <=0 && left <= i && i <= right) {
192202
return false;
193203
}
194204
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
class Solution {
22
public:
33
bool isCovered(vector<vector<int>>& ranges, int left, int right) {
4-
int diff[52]{};
4+
vector<int> diff(52);
55
for (auto& range : ranges) {
66
int l = range[0], r = range[1];
77
++diff[l];
88
--diff[r + 1];
99
}
10-
int cur = 0;
11-
for (int i = 0; i < 52; ++i) {
12-
cur += diff[i];
13-
if (i >= left && i <= right && cur <= 0) {
10+
int s = 0;
11+
for (int i = 0; i < diff.size(); ++i) {
12+
s += diff[i];
13+
if (s <= 0 && left <= i && i <= right) {
1414
return false;
1515
}
1616
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
func isCovered(ranges [][]int, left int, right int) bool {
22
diff := [52]int{}
3-
for _, rg := range ranges {
4-
l, r := rg[0], rg[1]
3+
for _, e := range ranges {
4+
l, r := e[0], e[1]
55
diff[l]++
66
diff[r+1]--
77
}
8-
cur := 0
8+
s := 0
99
for i, x := range diff {
10-
cur += x
11-
if i>=left && i <= right && cur <= 0 {
10+
s += x
11+
if s<=0 && left <= i && i <= right {
1212
return false
1313
}
1414
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ public boolean isCovered(int[][] ranges, int left, int right) {
66
++diff[l];
77
--diff[r + 1];
88
}
9-
int cur = 0;
9+
int s = 0;
1010
for (int i = 0; i < diff.length; ++i) {
11-
cur += diff[i];
12-
if (i >= left && i <= right && cur == 0) {
11+
s += diff[i];
12+
if (s <= 0 && left <= i && i <= right) {
1313
return false;
1414
}
1515
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
* @return {boolean}
66
*/
77
var isCovered = function (ranges, left, right) {
8-
const diff = newArray(52).fill(0);
8+
const diff = Array(52).fill(0);
99
for (const [l, r] of ranges) {
1010
++diff[l];
1111
--diff[r + 1];
1212
}
13-
let cur = 0;
14-
for (let i = 0; i < 52; ++i) {
15-
cur += diff[i];
16-
if (i>=left && i <= right && cur <= 0) {
13+
let s = 0;
14+
for (let i = 0; i < diff.length; ++i) {
15+
s += diff[i];
16+
if (s<=0 && left <= i && i <= right) {
1717
return false;
1818
}
1919
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ def isCovered(self, ranges: List[List[int]], left: int, right: int) -> bool:
44
for l, r in ranges:
55
diff[l] += 1
66
diff[r + 1] -= 1
7-
cur = 0
7+
s = 0
88
for i, x in enumerate(diff):
9-
cur += x
10-
if left <= i<= rightandcur==0:
9+
s += x
10+
if s <= 0andleft<= i<=right:
1111
return False
1212
return True

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
function isCovered(ranges: number[][], left: number, right: number): boolean {
2-
const diff=new Array(52).fill(0);
2+
const diff: number[]= Array(52).fill(0);
33
for (const [l, r] of ranges) {
44
++diff[l];
55
--diff[r + 1];
66
}
7-
let cur = 0;
8-
for (let i = 0; i < 52; ++i) {
9-
cur += diff[i];
10-
if (i>=left && i <= right && cur <= 0) {
7+
let s = 0;
8+
for (let i = 0; i < diff.length; ++i) {
9+
s += diff[i];
10+
if (s<=0 && left <= i && i <= right) {
1111
return false;
1212
}
1313
}

‎solution/1800-1899/1894.Find the Student that Will Replace the Chalk/README.md‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,7 @@ func chalkReplacer(chalk []int, k int) int {
161161

162162
```ts
163163
function chalkReplacer(chalk: number[], k: number): number {
164-
let s = 0;
165-
for (const x of chalk) {
166-
s += x;
167-
}
164+
const s = chalk.reduce((acc, cur) => acc + cur, 0);
168165
k %= s;
169166
for (let i = 0; ; ++i) {
170167
if (k < chalk[i]) {

‎solution/1800-1899/1894.Find the Student that Will Replace the Chalk/README_EN.md‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,7 @@ func chalkReplacer(chalk []int, k int) int {
159159

160160
```ts
161161
function chalkReplacer(chalk: number[], k: number): number {
162-
let s = 0;
163-
for (const x of chalk) {
164-
s += x;
165-
}
162+
const s = chalk.reduce((acc, cur) => acc + cur, 0);
166163
k %= s;
167164
for (let i = 0; ; ++i) {
168165
if (k < chalk[i]) {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /