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

1
class Solution {
2
public:
3
int minSwaps(vector<int> &nums) {
4
int n = nums.size();
5
int ones = 0; // total no. of ones
6
for (int i = 0; i < n; i++) {
7
if (nums[i] == 1) ones++;
8
}
9
if (ones <= 1) return 0;
10

11
int k = ones; // sliding window length
12
int maxOnes = 0; // maxOnes in sub array of length k
13
int cnt = 0;
14
for (int i = 0; i < k; i++) {
15
if (nums[i] == 1) cnt++;
16
}
17
maxOnes = cnt;
18
for (int i = k; i < n + k; i++) {
19
if (nums[i - k] == 1) cnt--; // if element removing from window is 1, then decrease count.
20
if (nums[i % n] == 1) cnt++; // if element adding to window is 1, then increase count.
21
maxOnes = max(maxOnes,
22
cnt); // maintaing maxOnes for all sub arrays of length k.
23
}
24
return (k - maxOnes); // (total length of subarray - ones in the sub array found)
25
}
26
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0