func largestSumAfterKNegations(nums []int, k int) int {
// 第一步 按绝对值从大到小排序nums
sort.Slice(nums, func(i, j int) bool {
return math.Abs(float64(nums[i])) > math.Abs(float64(nums[j]))
})
// 第二步 遍历nums,碰到负数就取反
for i := 0; i < len(nums); i++ {
// 当k已经为零时就可以结束了
if k == 0 {
break
}
if nums[i] < 0 {
nums[i] *= -1
k--
}
}
// 第三步 如果k还大于0便取反绝对值最小的数,最小化影响
// 只有k还是奇数时才用操作
if k % 2 == 1 {
nums[len(nums)-1] *= -1
}
// 求和
sum := 0
for _, num := range nums {
sum += num
}
return sum
}