题目:
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
- 选择某个下标
i并将nums[i]替换为-nums[i]。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
算法: 方法一:模拟
func largestSumAfterKNegations(nums []int, k int) int {
sort.Ints(nums)
sum := 0
minVal := math.MaxInt32
for i := 0; i < len(nums) ; i ++ {
// 先将负数改为正数
if nums[i] < 0 && k > 0 {
nums[i] = -nums[i]
k --
}
// 如果有数字为0,则消耗所有的k
if nums[i] == 0 {
k = 0
}
// 找到翻转后的最小值
if nums[i] < minVal {
minVal = nums[i]
}
sum = sum + nums[i]
}
// 还有剩余的k需要翻转,并且翻转次数为奇数次,找最小的数翻转
if k % 2 != 0 {
sum = sum - 2 * minVal
}
return sum
}