class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int sum = 0;
for(int i = 0; i < nums.length;i++){
if(nums[i] < 0 && k > 0){
nums[i] *= -1;
k--;
}else break;
}
for(int num:nums) sum += num;
if(k == 0 || k % 2 == 0)return sum;
else{
Arrays.sort(nums);
sum -= (nums[0] * 2);
return sum;
}
}
}
有一点优化的地方,第一次按绝对值排序从大到小,然后遍历,遇到负数则取反k--,遍历结束或者k = 0就break,后续情况处理跟上面代码一样
博客围绕LeetCode 1005题“K次取反后最大化的数组和”展开,介绍了一种优化算法。先将数组按绝对值从大到小排序,遍历数组,遇到负数就取反并使k减1,当遍历结束或k为0时停止,后续处理与常规代码相同。
334

被折叠的 条评论
为什么被折叠?



