Merge pull request #1290 from Jamcy123/1005.K次取反后最大化的数组和

添加 1005.K次取反后最大化的数组和  优化解法  JavaScript 版本 (一次遍历即可解决)
This commit is contained in:
程序员Carl
2022-05-25 09:47:29 +08:00
committed by GitHub

View File

@ -209,6 +209,22 @@ var largestSumAfterKNegations = function(nums, k) {
return a + b
})
};
// 版本二 (优化: 一次遍历)
var largestSumAfterKNegations = function(nums, k) {
nums.sort((a, b) => Math.abs(b) - Math.abs(a)); // 排序
let sum = 0;
for(let i = 0; i < nums.length; i++) {
if(nums[i] < 0 && k-- > 0) { // 负数取反k 数量足够时)
nums[i] = -nums[i];
}
sum += nums[i]; // 求和
}
if(k % 2 > 0) { // k 有多余的k若消耗完则应为 -1
sum -= 2 * nums[nums.length - 1]; // 减去两倍的最小值(因为之前加过一次)
}
return sum;
};
```