Minimum Swaps to Group All 1's Together II LeetCode solution in JavaScript

1
var minSwaps = function (nums) {
2
const MAX = Number.MAX_SAFE_INTEGER;
3

4
let ones = nums.reduce((acc, bit) => acc + bit, 0);
5

6
const doubledNums = nums.concat(nums.slice(0, nums.length - 1));
7

8
let minSwap = MAX;
9
let left = 0;
10
let onesWithinWindow = 0;
11

12
for (let i = 0; i < doubledNums.length; ++i) {
13
const rightBit = doubledNums[i];
14

15
if (rightBit === 1) onesWithinWindow += 1;
16

17
if (i >= ones) {
18
const leftBit = doubledNums[left];
19

20
if (leftBit === 1) onesWithinWindow -= 1;
21
++left;
22
}
23

24
if (i + 1 >= ones) minSwap = Math.min(minSwap, ones - onesWithinWindow);
25
}
26

27
return minSwap;
28
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0