题意描述:
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
利用贪心算法,将负数变为正数,若均为正数后k依旧不为0,那么就要判断k是否剩余为奇数。因为偶数次经过连续取反可以抵消。
完整C++代码如下:
class Solution {
static bool cmp(int a, int b){
return abs(a) > abs(b);
}
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(), nums.end(), cmp);
for(int i = 0; i < nums.size(); i++){
if(nums[i] < 0 && k > 0){
nums[i] *= -1;
k--;
}
}
if(k % 2 ==1){
nums[nums.size() - 1] *= -1;
}
int result = 0;
for(int num : nums){
result += num;
}
return result;
}
};