题目:
解决办法:
我用的贪心,局部最优达到全局最优。
- 如果数组中的最小数为负数,那么把这个负数取反,k--
- 如果数组中的最小数为正数,且k是一个偶数,直接求和
- 如果数组中的最小数为正数,且k是一个奇数,把最小数取反,然后求和
代码:
var largestSumAfterKNegations = function (nums, k) {
let sum = 0;
while (k) {
let min = Math.min.apply(this, nums);
// 如果数组中有负数,且k>0 把最小的负数取反
if (min < 0) {
nums[nums.indexOf(min)] = -min;
// 如果数组中没有负数,且k为偶数,直接求和
} else if (min >= 0 && k % 2 == 0) {
k = 1;
// 如果数组中没有负数,且k为奇数,把最小的数取反,然后求和
} else if (min >= 0 && k % 2) {
nums[nums.indexOf(min)] = -min;
k = 1;
}
sum = nums.reduce((total, item) => total + item, 0);
k--;
}
return sum;
};