Skip to content

Commit aa1a6f6

Browse files
committed
feat: add solutions to lc problems: No.2600~2603
* No.2600.K Items With the Maximum Sum * No.2601.Prime Subtraction Operation * No.2602.Minimum Operations to Make All Array Elements Equal * No.2603.Collect Coins in a Tree
1 parent 63ac6fe commit aa1a6f6

File tree

12 files changed

+433
-0
lines changed

12 files changed

+433
-0
lines changed

solution/2600-2699/2600.K Items With the Maximum Sum/README.md

+21
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,27 @@ func kItemsWithMaximumSum(numOnes int, numZeros int, numNegOnes int, k int) int
135135
}
136136
```
137137

138+
### **TypeScript**
139+
140+
```ts
141+
function kItemsWithMaximumSum(
142+
numOnes: number,
143+
numZeros: number,
144+
numNegOnes: number,
145+
k: number,
146+
): number {
147+
if (numOnes >= k) {
148+
return k;
149+
}
150+
k -= numOnes;
151+
if (numZeros >= k) {
152+
return numOnes;
153+
}
154+
k -= numZeros;
155+
return numOnes - k;
156+
}
157+
```
158+
138159
### **...**
139160

140161
```

solution/2600-2699/2600.K Items With the Maximum Sum/README_EN.md

+21
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,27 @@ func kItemsWithMaximumSum(numOnes int, numZeros int, numNegOnes int, k int) int
116116
}
117117
```
118118

119+
### **TypeScript**
120+
121+
```ts
122+
function kItemsWithMaximumSum(
123+
numOnes: number,
124+
numZeros: number,
125+
numNegOnes: number,
126+
k: number,
127+
): number {
128+
if (numOnes >= k) {
129+
return k;
130+
}
131+
k -= numOnes;
132+
if (numZeros >= k) {
133+
return numOnes;
134+
}
135+
k -= numZeros;
136+
return numOnes - k;
137+
}
138+
```
139+
119140
### **...**
120141

121142
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function kItemsWithMaximumSum(
2+
numOnes: number,
3+
numZeros: number,
4+
numNegOnes: number,
5+
k: number,
6+
): number {
7+
if (numOnes >= k) {
8+
return k;
9+
}
10+
k -= numOnes;
11+
if (numZeros >= k) {
12+
return numOnes;
13+
}
14+
k -= numZeros;
15+
return numOnes - k;
16+
}

solution/2600-2699/2601.Prime Subtraction Operation/README.md

+45
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,51 @@ func primeSubOperation(nums []int) bool {
211211
}
212212
```
213213

214+
### **TypeScript**
215+
216+
```ts
217+
function primeSubOperation(nums: number[]): boolean {
218+
const p: number[] = [];
219+
for (let i = 2; i <= 1000; ++i) {
220+
let ok = true;
221+
for (const j of p) {
222+
if (i % j === 0) {
223+
ok = false;
224+
break;
225+
}
226+
}
227+
if (ok) {
228+
p.push(i);
229+
}
230+
}
231+
const search = (x: number): number => {
232+
let l = 0;
233+
let r = p.length;
234+
while (l < r) {
235+
const mid = (l + r) >> 1;
236+
if (p[mid] > x) {
237+
r = mid;
238+
} else {
239+
l = mid + 1;
240+
}
241+
}
242+
return l;
243+
};
244+
const n = nums.length;
245+
for (let i = n - 2; i >= 0; --i) {
246+
if (nums[i] < nums[i + 1]) {
247+
continue;
248+
}
249+
const j = search(nums[i] - nums[i + 1]);
250+
if (j === p.length || p[j] >= nums[i]) {
251+
return false;
252+
}
253+
nums[i] -= p[j];
254+
}
255+
return true;
256+
}
257+
```
258+
214259
### **...**
215260

216261
```

solution/2600-2699/2601.Prime Subtraction Operation/README_EN.md

+45
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,51 @@ func primeSubOperation(nums []int) bool {
190190
}
191191
```
192192

193+
### **TypeScript**
194+
195+
```ts
196+
function primeSubOperation(nums: number[]): boolean {
197+
const p: number[] = [];
198+
for (let i = 2; i <= 1000; ++i) {
199+
let ok = true;
200+
for (const j of p) {
201+
if (i % j === 0) {
202+
ok = false;
203+
break;
204+
}
205+
}
206+
if (ok) {
207+
p.push(i);
208+
}
209+
}
210+
const search = (x: number): number => {
211+
let l = 0;
212+
let r = p.length;
213+
while (l < r) {
214+
const mid = (l + r) >> 1;
215+
if (p[mid] > x) {
216+
r = mid;
217+
} else {
218+
l = mid + 1;
219+
}
220+
}
221+
return l;
222+
};
223+
const n = nums.length;
224+
for (let i = n - 2; i >= 0; --i) {
225+
if (nums[i] < nums[i + 1]) {
226+
continue;
227+
}
228+
const j = search(nums[i] - nums[i + 1]);
229+
if (j === p.length || p[j] >= nums[i]) {
230+
return false;
231+
}
232+
nums[i] -= p[j];
233+
}
234+
return true;
235+
}
236+
```
237+
193238
### **...**
194239

195240
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
function primeSubOperation(nums: number[]): boolean {
2+
const p: number[] = [];
3+
for (let i = 2; i <= 1000; ++i) {
4+
let ok = true;
5+
for (const j of p) {
6+
if (i % j === 0) {
7+
ok = false;
8+
break;
9+
}
10+
}
11+
if (ok) {
12+
p.push(i);
13+
}
14+
}
15+
const search = (x: number): number => {
16+
let l = 0;
17+
let r = p.length;
18+
while (l < r) {
19+
const mid = (l + r) >> 1;
20+
if (p[mid] > x) {
21+
r = mid;
22+
} else {
23+
l = mid + 1;
24+
}
25+
}
26+
return l;
27+
};
28+
const n = nums.length;
29+
for (let i = n - 2; i >= 0; --i) {
30+
if (nums[i] < nums[i + 1]) {
31+
continue;
32+
}
33+
const j = search(nums[i] - nums[i + 1]);
34+
if (j === p.length || p[j] >= nums[i]) {
35+
return false;
36+
}
37+
nums[i] -= p[j];
38+
}
39+
return true;
40+
}

solution/2600-2699/2602.Minimum Operations to Make All Array Elements Equal/README.md

+35
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,41 @@ func minOperations(nums []int, queries []int) (ans []int64) {
179179
}
180180
```
181181

182+
### **TypeScript**
183+
184+
```ts
185+
function minOperations(nums: number[], queries: number[]): number[] {
186+
nums.sort((a, b) => a - b);
187+
const n = nums.length;
188+
const s: number[] = new Array(n + 1).fill(0);
189+
for (let i = 0; i < n; ++i) {
190+
s[i + 1] = s[i] + nums[i];
191+
}
192+
const search = (x: number): number => {
193+
let l = 0;
194+
let r = n;
195+
while (l < r) {
196+
const mid = (l + r) >> 1;
197+
if (nums[mid] >= x) {
198+
r = mid;
199+
} else {
200+
l = mid + 1;
201+
}
202+
}
203+
return l;
204+
};
205+
const ans: number[] = [];
206+
for (const x of queries) {
207+
const i = search(x + 1);
208+
let t = s[n] - s[i] - (n - i) * x;
209+
const j = search(x);
210+
t += x * j - s[j];
211+
ans.push(t);
212+
}
213+
return ans;
214+
}
215+
```
216+
182217
### **...**
183218

184219
```

solution/2600-2699/2602.Minimum Operations to Make All Array Elements Equal/README_EN.md

+35
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,41 @@ func minOperations(nums []int, queries []int) (ans []int64) {
157157
}
158158
```
159159

160+
### **TypeScript**
161+
162+
```ts
163+
function minOperations(nums: number[], queries: number[]): number[] {
164+
nums.sort((a, b) => a - b);
165+
const n = nums.length;
166+
const s: number[] = new Array(n + 1).fill(0);
167+
for (let i = 0; i < n; ++i) {
168+
s[i + 1] = s[i] + nums[i];
169+
}
170+
const search = (x: number): number => {
171+
let l = 0;
172+
let r = n;
173+
while (l < r) {
174+
const mid = (l + r) >> 1;
175+
if (nums[mid] >= x) {
176+
r = mid;
177+
} else {
178+
l = mid + 1;
179+
}
180+
}
181+
return l;
182+
};
183+
const ans: number[] = [];
184+
for (const x of queries) {
185+
const i = search(x + 1);
186+
let t = s[n] - s[i] - (n - i) * x;
187+
const j = search(x);
188+
t += x * j - s[j];
189+
ans.push(t);
190+
}
191+
return ans;
192+
}
193+
```
194+
160195
### **...**
161196

162197
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
function minOperations(nums: number[], queries: number[]): number[] {
2+
nums.sort((a, b) => a - b);
3+
const n = nums.length;
4+
const s: number[] = new Array(n + 1).fill(0);
5+
for (let i = 0; i < n; ++i) {
6+
s[i + 1] = s[i] + nums[i];
7+
}
8+
const search = (x: number): number => {
9+
let l = 0;
10+
let r = n;
11+
while (l < r) {
12+
const mid = (l + r) >> 1;
13+
if (nums[mid] >= x) {
14+
r = mid;
15+
} else {
16+
l = mid + 1;
17+
}
18+
}
19+
return l;
20+
};
21+
const ans: number[] = [];
22+
for (const x of queries) {
23+
const i = search(x + 1);
24+
let t = s[n] - s[i] - (n - i) * x;
25+
const j = search(x);
26+
t += x * j - s[j];
27+
ans.push(t);
28+
}
29+
return ans;
30+
}

solution/2600-2699/2603.Collect Coins in a Tree/README.md

+50
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,56 @@ func collectTheCoins(coins []int, edges [][]int) int {
272272
}
273273
```
274274

275+
### **TypeScript**
276+
277+
```ts
278+
function collectTheCoins(coins: number[], edges: number[][]): number {
279+
const n = coins.length;
280+
const g: Set<number>[] = new Array(n).fill(0).map(() => new Set<number>());
281+
for (const [a, b] of edges) {
282+
g[a].add(b);
283+
g[b].add(a);
284+
}
285+
let q: number[] = [];
286+
for (let i = 0; i < n; ++i) {
287+
if (coins[i] === 0 && g[i].size === 1) {
288+
q.push(i);
289+
}
290+
}
291+
while (q.length) {
292+
const i = q.pop()!;
293+
for (const j of g[i]) {
294+
g[j].delete(i);
295+
if (coins[j] === 0 && g[j].size === 1) {
296+
q.push(j);
297+
}
298+
}
299+
g[i].clear();
300+
}
301+
q = [];
302+
for (let k = 0; k < 2; ++k) {
303+
for (let i = 0; i < n; ++i) {
304+
if (g[i].size === 1) {
305+
q.push(i);
306+
}
307+
}
308+
for (const i of q) {
309+
for (const j of g[i]) {
310+
g[j].delete(i);
311+
}
312+
g[i].clear();
313+
}
314+
}
315+
let ans = 0;
316+
for (const [a, b] of edges) {
317+
if (g[a].size > 0 && g[b].size > 0) {
318+
ans += 2;
319+
}
320+
}
321+
return ans;
322+
}
323+
```
324+
275325
### **...**
276326

277327
```

0 commit comments

Comments
 (0)