Minimum Adjacent Swaps for K Consecutive Ones LeetCode solution in Java

1
class Solution {
2
public int minMoves(int[] nums, int k) {
3
var gaps = new ArrayList<Integer>();
4
for (int i = 0, last = -1; i < nums.length; ++i) {
5
if (nums[i] == 1) {
6
if (last > -1) {
7
gaps.add(i - 1 - last);
8
}
9
last = i;
10
}
11
}
12
int lsum = 0, rsum = 0, wlsum = 0, wrsum = 0;
13
for (int i = k / 2 - 1; i >= 0; --i) {
14
lsum += gaps.get(i); // lsum = 3+0
15
wlsum += lsum; // wlsum = 1*3+2*0
16
}
17
for (int i = k / 2; i < k - 1; ++i) {
18
rsum += gaps.get(i); // rsum = 2+5
19
wrsum += rsum; // wrsum = 2*2+1*5
20
}
21
int ans = wlsum + wrsum;
22
for (int p = 0, q = k / 2, r = k - 1; r < gaps.size(); ++p, ++q, ++r) {
23
wlsum += (k / 2) * gaps.get(q) - lsum;
24
lsum += gaps.get(q) - gaps.get(p);
25

26
rsum += gaps.get(r) - gaps.get(q);
27
wrsum += rsum - ((k - 1) / 2) * gaps.get(q);
28

29
ans = Math.min(ans, wlsum + wrsum);
30
}
31
return ans;
32
}
33
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0