Update 1005.K次取反后最大化的数组和.md

Java的版本二题解
This commit is contained in:
Violet_Fu
2024-07-29 22:07:20 -07:00
committed by GitHub
parent f844fb2a5c
commit fac95a0a43

View File

@ -128,6 +128,36 @@ class Solution {
} }
} }
// 版本二排序数组并贪心地尽可能将负数翻转为正数再根据剩余的k值调整最小元素的符号从而最大化数组的总和。
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
if (nums.length == 1) return nums[0];
// 排序:先把负数处理了
Arrays.sort(nums);
for (int i = 0; i < nums.length && k > 0; i++) { // 贪心点, 通过负转正, 消耗尽可能多的k
if (nums[i] < 0) {
nums[i] = -nums[i];
k--;
}
}
// 退出循环, k > 0 || k < 0 (k消耗完了不用讨论)
if (k % 2 == 1) { // k > 0 && k is odd对于负数负-正-负-正
Arrays.sort(nums); // 再次排序得到剩余的负数,或者最小的正数
nums[0] = -nums[0];
}
// k > 0 && k is evenflip数字不会产生影响: 对于负数: 负-正-负;对于正数:正-负-正
int sum = 0;
for (int num : nums) { // 计算最大和
sum += num;
}
return sum;
}
}
``` ```
### Python ### Python