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 * 104import kotlin.math.abs
import kotlin.math.min
class Solution {
fun maxAlternatingSum(nums: IntArray): Long {
val n = nums.size
var need = n / 2
val maxa = 40000
val freq = IntArray(maxa + 1)
var total: Long = 0
for (x in nums) {
val a = abs(x)
freq[a]++
total += 1L * a * a
}
var small: Long = 0
var a = 0
while (a <= maxa && need > 0) {
val take = min(freq[a], need)
if (take > 0) {
small += 1L * a * a * take
need -= take
}
a++
}
return total - 2 * small
}
}