思路:
1、对原数组排一次序。
2、迭代k次取反中,考虑小于0和大于0的情况。
2.1 小于0的数组区间,直接取反,到达负数和正数界限时跳过。
2.2 大于0的数组区间,直接取反。
3、累计数组。
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
if (nums.length == 1) return k % 2 == 0 ? nums[0] : -nums[0];
Arrays.sort(nums);
int sum = 0;
int idx = 0;
for (int i = 0; i < k; i++) {
//nums[idx]<0时
if (i < nums.length - 1 && nums[idx] < 0) {
nums[idx] = -nums[idx];
//负数和正数的界限时
if (nums[idx] >= Math.abs(nums[idx + 1])) idx++;
continue;
}
//nums[idx]>0时
nums[idx] = -nums[idx];
}
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
}