Skip to content

Commit 0af9603

Browse files
committed
feat: add ts solution to lc problem: No.2134
1 parent 08068d6 commit 0af9603

File tree

3 files changed

+93
-0
lines changed

3 files changed

+93
-0
lines changed

solution/2100-2199/2134.Minimum Swaps to Group All 1's Together II/README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,40 @@ public class Solution {
242242

243243
<!-- solution:end -->
244244

245+
<!-- solution:start -->
246+
247+
### Solution 2: Prefix Sum
248+
249+
<!-- tabs:start -->
250+
251+
#### TypeScript
252+
253+
```ts
254+
function minSwaps(nums: number[]): number {
255+
const n = nums.length;
256+
257+
const getMin = (x: 0 | 1) => {
258+
const prefixSum = Array(n + 1).fill(0);
259+
for (let i = 1; i <= n; i++) {
260+
prefixSum[i] = prefixSum[i - 1] + (nums[i - 1] === x);
261+
}
262+
263+
const length = prefixSum[n];
264+
let ans = Number.POSITIVE_INFINITY;
265+
for (let l = 0, r = length; r <= n; l++, r++) {
266+
const min = length - (prefixSum[r] - prefixSum[l]);
267+
ans = Math.min(ans, min);
268+
}
269+
270+
return ans;
271+
};
272+
273+
return Math.min(getMin(0), getMin(1));
274+
};
275+
```
276+
277+
<!-- tabs:end -->
278+
279+
<!-- solution:end -->
280+
245281
<!-- problem:end -->

solution/2100-2199/2134.Minimum Swaps to Group All 1's Together II/README_EN.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,40 @@ public class Solution {
244244

245245
<!-- solution:end -->
246246

247+
<!-- solution:start -->
248+
249+
### Solution 2: Prefix Sum
250+
251+
<!-- tabs:start -->
252+
253+
#### TypeScript
254+
255+
```ts
256+
function minSwaps(nums: number[]): number {
257+
const n = nums.length;
258+
259+
const getMin = (x: 0 | 1) => {
260+
const prefixSum = Array(n + 1).fill(0);
261+
for (let i = 1; i <= n; i++) {
262+
prefixSum[i] = prefixSum[i - 1] + (nums[i - 1] === x);
263+
}
264+
265+
const length = prefixSum[n];
266+
let ans = Number.POSITIVE_INFINITY;
267+
for (let l = 0, r = length; r <= n; l++, r++) {
268+
const min = length - (prefixSum[r] - prefixSum[l]);
269+
ans = Math.min(ans, min);
270+
}
271+
272+
return ans;
273+
};
274+
275+
return Math.min(getMin(0), getMin(1));
276+
};
277+
```
278+
279+
<!-- tabs:end -->
280+
281+
<!-- solution:end -->
282+
247283
<!-- problem:end -->
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function minSwaps(nums: number[]): number {
2+
const n = nums.length;
3+
4+
const getMin = (x: 0 | 1) => {
5+
const prefixSum = Array(n + 1).fill(0);
6+
for (let i = 1; i <= n; i++) {
7+
prefixSum[i] = prefixSum[i - 1] + (nums[i - 1] === x);
8+
}
9+
10+
const length = prefixSum[n];
11+
let ans = Number.POSITIVE_INFINITY;
12+
for (let l = 0, r = length; r <= n; l++, r++) {
13+
const min = length - (prefixSum[r] - prefixSum[l]);
14+
ans = Math.min(ans, min);
15+
}
16+
17+
return ans;
18+
};
19+
20+
return Math.min(getMin(0), getMin(1));
21+
}

0 commit comments

Comments
 (0)