File tree Expand file tree Collapse file tree 3 files changed +93
-0
lines changed
solution/2100-2199/2134.Minimum Swaps to Group All 1's Together II Expand file tree Collapse file tree 3 files changed +93
-0
lines changed Original file line number Diff line number Diff line change @@ -242,4 +242,40 @@ public class Solution {
242
242
243
243
<!-- solution: end -->
244
244
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
+
245
281
<!-- problem: end -->
Original file line number Diff line number Diff line change @@ -244,4 +244,40 @@ public class Solution {
244
244
245
245
<!-- solution: end -->
246
246
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
+
247
283
<!-- problem: end -->
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments