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) {7
gaps.add(i - 1 - last);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+015
wlsum += lsum; // wlsum = 1*3+2*017
for (int i = k / 2; i < k - 1; ++i) {18
rsum += gaps.get(i); // rsum = 2+519
wrsum += rsum; // wrsum = 2*2+1*521
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);26
rsum += gaps.get(r) - gaps.get(q);27
wrsum += rsum - ((k - 1) / 2) * gaps.get(q);29
ans = Math.min(ans, wlsum + wrsum);