1005. K次取反后最大化的数组和
贪心
import java.util.Arrays;
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
/**
* 先将数组排序,让负数在前面,然后只反转负数
*/
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
if (nums[i] < 0 && k > 0){
nums[i] = -nums[i];
k--;
}
}
/**
* 反转完毕,如果k == 0说明最大的负数都被反转了;k最后剩下偶数次,说明数组元素都是正的
* 如果k剩余奇数次,说明必须要有一个正数被反转成负数,此时再次排序,反转最小的正数
*/
if (k % 2 == 1){
Arrays.sort(nums);
nums[0] = -nums[0];
}
return Arrays.stream(nums).sum();
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(1)
*/
https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/