Skip to content

Commit e962914

Browse files
authored
feat: update ts and add js solutions to lc problem: No.2134 (#3351)
1 parent 60ea283 commit e962914

File tree

6 files changed

+240
-19
lines changed

6 files changed

+240
-19
lines changed

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

+88-6
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,35 @@ func minSwaps(nums []int) int {
163163

164164
```ts
165165
function minSwaps(nums: number[]): number {
166+
const n = nums.length;
166167
const k = nums.reduce((a, b) => a + b, 0);
167-
let cnt = nums.slice(0, k).reduce((a, b) => a + b, 0);
168-
let mx = cnt;
168+
let cnt = k - nums.slice(0, k).reduce((a, b) => a + b, 0);
169+
let min = cnt;
170+
171+
for (let i = k; i < n + k; i++) {
172+
cnt += nums[i - k] - nums[i % n];
173+
min = Math.min(min, cnt);
174+
}
175+
176+
return min;
177+
}
178+
```
179+
180+
#### JavaScript
181+
182+
```js
183+
function minSwaps(nums) {
169184
const n = nums.length;
170-
for (let i = k; i < n + k; ++i) {
171-
cnt += nums[i % n] - nums[(i - k + n) % n];
172-
mx = Math.max(mx, cnt);
185+
const k = nums.reduce((a, b) => a + b, 0);
186+
let cnt = k - nums.slice(0, k).reduce((a, b) => a + b, 0);
187+
let min = cnt;
188+
189+
for (let i = k; i < n + k; i++) {
190+
cnt += nums[i - k] - nums[i % n];
191+
min = Math.min(min, cnt);
173192
}
174-
return k - mx;
193+
194+
return min;
175195
}
176196
```
177197

@@ -222,4 +242,66 @@ public class Solution {
222242

223243
<!-- solution:end -->
224244

245+
<!-- solution:start -->
246+
247+
### 方法二:前缀和
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+
#### JavaScript
278+
279+
```js
280+
function minSwaps(nums) {
281+
const n = nums.length;
282+
283+
const getMin = x => {
284+
const prefixSum = Array(n + 1).fill(0);
285+
for (let i = 1; i <= n; i++) {
286+
prefixSum[i] = prefixSum[i - 1] + (nums[i - 1] === x);
287+
}
288+
289+
const length = prefixSum[n];
290+
let ans = Number.POSITIVE_INFINITY;
291+
for (let l = 0, r = length; r <= n; l++, r++) {
292+
const min = length - (prefixSum[r] - prefixSum[l]);
293+
ans = Math.min(ans, min);
294+
}
295+
296+
return ans;
297+
};
298+
299+
return Math.min(getMin(0), getMin(1));
300+
}
301+
```
302+
303+
<!-- tabs:end -->
304+
305+
<!-- solution:end -->
306+
225307
<!-- problem:end -->

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

+88-6
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,35 @@ func minSwaps(nums []int) int {
165165

166166
```ts
167167
function minSwaps(nums: number[]): number {
168+
const n = nums.length;
168169
const k = nums.reduce((a, b) => a + b, 0);
169-
let cnt = nums.slice(0, k).reduce((a, b) => a + b, 0);
170-
let mx = cnt;
170+
let cnt = k - nums.slice(0, k).reduce((a, b) => a + b, 0);
171+
let min = cnt;
172+
173+
for (let i = k; i < n + k; i++) {
174+
cnt += nums[i - k] - nums[i % n];
175+
min = Math.min(min, cnt);
176+
}
177+
178+
return min;
179+
}
180+
```
181+
182+
#### JavaScript
183+
184+
```ts
185+
function minSwaps(nums) {
171186
const n = nums.length;
172-
for (let i = k; i < n + k; ++i) {
173-
cnt += nums[i % n] - nums[(i - k + n) % n];
174-
mx = Math.max(mx, cnt);
187+
const k = nums.reduce((a, b) => a + b, 0);
188+
let cnt = k - nums.slice(0, k).reduce((a, b) => a + b, 0);
189+
let min = cnt;
190+
191+
for (let i = k; i < n + k; i++) {
192+
cnt += nums[i - k] - nums[i % n];
193+
min = Math.min(min, cnt);
175194
}
176-
return k - mx;
195+
196+
return min;
177197
}
178198
```
179199

@@ -224,4 +244,66 @@ public class Solution {
224244

225245
<!-- solution:end -->
226246

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+
#### JavaScript
280+
281+
```js
282+
function minSwaps(nums) {
283+
const n = nums.length;
284+
285+
const getMin = x => {
286+
const prefixSum = Array(n + 1).fill(0);
287+
for (let i = 1; i <= n; i++) {
288+
prefixSum[i] = prefixSum[i - 1] + (nums[i - 1] === x);
289+
}
290+
291+
const length = prefixSum[n];
292+
let ans = Number.POSITIVE_INFINITY;
293+
for (let l = 0, r = length; r <= n; l++, r++) {
294+
const min = length - (prefixSum[r] - prefixSum[l]);
295+
ans = Math.min(ans, min);
296+
}
297+
298+
return ans;
299+
};
300+
301+
return Math.min(getMin(0), getMin(1));
302+
}
303+
```
304+
305+
<!-- tabs:end -->
306+
307+
<!-- solution:end -->
308+
227309
<!-- problem:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function minSwaps(nums) {
2+
const n = nums.length;
3+
const k = nums.reduce((a, b) => a + b, 0);
4+
let cnt = k - nums.slice(0, k).reduce((a, b) => a + b, 0);
5+
let min = cnt;
6+
7+
for (let i = k; i < n + k; i++) {
8+
cnt += nums[i - k] - nums[i % n];
9+
min = Math.min(min, cnt);
10+
}
11+
12+
return min;
13+
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
function minSwaps(nums: number[]): number {
2-
const k = nums.reduce((a, b) => a + b, 0);
3-
let cnt = nums.slice(0, k).reduce((a, b) => a + b, 0);
4-
let mx = cnt;
52
const n = nums.length;
6-
for (let i = k; i < n + k; ++i) {
7-
cnt += nums[i % n] - nums[(i - k + n) % n];
8-
mx = Math.max(mx, cnt);
3+
const k = nums.reduce((a, b) => a + b, 0);
4+
let cnt = k - nums.slice(0, k).reduce((a, b) => a + b, 0);
5+
let min = cnt;
6+
7+
for (let i = k; i < n + k; i++) {
8+
cnt += nums[i - k] - nums[i % n];
9+
min = Math.min(min, cnt);
910
}
10-
return k - mx;
11+
12+
return min;
1113
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function minSwaps(nums) {
2+
const n = nums.length;
3+
4+
const getMin = x => {
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+
}
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)