Skip to content

Latest commit

 

History

History
30 lines (30 loc) · 790 Bytes

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

File metadata and controls

30 lines (30 loc) · 790 Bytes
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
}