Minimum Moves to Make Array Complementary LeetCode solution in Java

1
class Solution {
2
public int minMoves(int[] nums, int limit) {
3
int[] oneMove = new int[2 * limit + 2];
4
Map<Integer, Integer> noMove = new HashMap<>();
5

6
for (int i = 0; i < nums.length / 2; i++) {
7
int j = nums.length - 1 - i;
8
noMove.merge(nums[i] + nums[j], 1, Integer::sum);
9
oneMove[Math.min(nums[i], nums[j]) + 1]++;
10
oneMove[Math.max(nums[i], nums[j]) + limit + 1]--;
11
}
12

13
int ans = nums.length, one = 0;
14
for (int i = 2; i <= 2 * limit; i++) {
15
one += oneMove[i];
16
ans = Math.min(ans, one + 2 * (nums.length / 2 - one) - noMove.getOrDefault(i, 0));
17
}
18

19
return ans;
20
}
21
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0