Medium
You are given an integer array nums. You may rearrange the elements in any order.
The alternating score of an array arr is defined as:
score = arr[0]2 - arr[1]2 + arr[2]2 - arr[3]2 + ...Return an integer denoting the maximum possible alternating score of nums after rearranging its elements.
Example 1:
Input: nums = [1,2,3]
Output: 12
Explanation:
A possible rearrangement for nums is [2,1,3], which gives the maximum alternating score among all possible rearrangements.
The alternating score is calculated as:
score = 22 - 12 + 32 = 4 - 1 + 9 = 12
Example 2:
Input: nums = [1,-1,2,-2,3,-3]
Output: 16
Explanation:
A possible rearrangement for nums is [-3,-1,-2,1,3,2], which gives the maximum alternating score among all possible rearrangements.
The alternating score is calculated as:
score = (-3)2 - (-1)2 + (-2)2 - (1)2 + (3)2 - (2)2 = 9 - 1 + 4 - 1 + 9 - 4 = 16
Constraints:
1 <= nums.length <= 105-4 * 104 <= nums[i] <= 4 * 104public class Solution {
public long maxAlternatingSum(int[] nums) {
int n = nums.length;
int need = n / 2;
int maxa = 40000;
int[] freq = new int[maxa + 1];
long total = 0;
for (int x : nums) {
int a = Math.abs(x);
freq[a]++;
total += 1L * a * a;
}
long small = 0;
for (int a = 0; a <= maxa && need > 0; a++) {
int take = Math.min(freq[a], need);
if (take > 0) {
small += 1L * a * a * take;
need -= take;
}
}
return total - 2 * small;
}
}