Skip to content
On this page

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

Question

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

选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标i

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

思路

需要考虑很多种情况,设数组中复数的个数为 n

  • k<n,尽量把绝对值大的负数变为正数
  • k>n,将所有的负数变为正数后重新排序,选最小的那个数变为负数
  • k=n,将所有的负数变为正数直接求和
js
var largestSumAfterKNegations = function(nums, k) {
    nums.sort((a,b)=>a<b?-1:1)		//排序
    for(let i in nums){
        if(nums[i]<0 && k>0){       //数组中存在负数,将所有的负数变为正数
          k--
          nums[i] = -1*nums[i]
        }
    }
    k = k%2                          //k只有三种情况:k=0、k为奇数、k为偶数,其中k=0和k为偶数结果相同
    if(k===1){						 //重新排序
        nums.sort((a,b)=>a<b?-1:1)      
        nums[0] = -1*nums[0]
    }
    return nums.reduce((pre,cur)=>pre+cur,0)
};