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 e962914

Browse files
authored
feat: update ts and add js solutions to lc problem: No.2134 (doocs#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‎

Lines changed: 88 additions & 6 deletions
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‎

Lines changed: 88 additions & 6 deletions
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 -->
Lines changed: 13 additions & 0 deletions
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+
}
Lines changed: 9 additions & 7 deletions
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
}
Lines changed: 21 additions & 0 deletions
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+
}
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)

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