K 次取反后最大化的数组和

Bernie


Bernie
1005. K 次取反后最大化的数组和
思路:
1.先从小到大排序,是的负数在前面。
2.遍历数组,当 nums[i]为负数,且 k 大于 0 时, 则将 nums[i]取反,k 减 1,然后相加得到总和 sum, 同时判断当前 nums[i]的值是否小于 min,若小于则将其值赋值给 min。
3.判断剩余的 k 是否大于 0, 若大于 0 且 k % 2 == 1, 则需要用总和 sum 减去两倍的最小值 min,最后返回总和 sum 即可。
typescript 解法
function largestSumAfterKNegations(nums: number[], k: number): number {
// 从小到大排序
nums.sort((a: number, b: number): number => a - b);
let min: number = 101;
let sum: number = 0;
for (let i = 0; i < nums.length; i++) {
let current = nums[i];
if (current < 0 && k != 0) {
current = -current;
k--;
}
if (current < min) {
min = current;
}
sum += current;
}
if (k > 0 && k % 2 === 1) {
sum -= 2 * min;
}
return sum;
}
go 解法
func largestSumAfterKNegations(nums []int, k int) int {
sum := 0
min := 101
sort.Ints(nums)
for i := 0; i< len(nums); i ++ {
current := nums[i]
if current < 0 && k != 0 {
current = -current
k --
}
if current < min {
min = current
}
sum += current;
}
if k > 0 && k % 2 == 1 {
sum -= 2 * min
}
return sum
}