列表

详情


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

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

重复这个过程恰好 k 次。可以多次选择同一个下标 i

以这种方式修改数组后,返回数组 可能的最大和

 

示例 1:

输入:nums = [4,2,3], k = 1
输出:5
解释:选择下标 1 ,nums 变为 [4,-2,3] 。

示例 2:

输入:nums = [3,-1,0,2], k = 3
输出:6
解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。

示例 3:

输入:nums = [2,-3,-1,5,-4], k = 2
输出:13
解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4] 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int largestSumAfterKNegations(vector<int>& nums, int k) { } };

golang 解法, 执行用时: 4 ms, 内存消耗: 2.6 MB, 提交时间: 2021-07-01 15:42:54

func largestSumAfterKNegations(nums []int, k int) int {
    sort.Ints(nums)
    for i := 0; i < len(nums); i++ {
        if k == 0 || nums[i] >= 0 {
            break
        }
        nums[i] = -nums[i]
        k--
    }
    sort.Ints(nums)
    if k % 2 != 0 {
        nums[0] = -nums[0]
    }
    return sum(nums)
}

func sum(nums []int) (ans int) {
    for _, num := range nums {
        ans += num
    }
    return ans
}

上一题