本文最后更新于609 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
1.本题采用两次贪心的方式完成,一次贪心用来在k的次数足够的前提下将所有的负数都取反,然后中间判断剩余的k的次数的奇偶,来使用一次取反的操作消耗最后剩余的次数,注:该次是第二次贪心也就是取最后也就说最小的元素进行取反,最后将局部最优累加统计结果。
CPP
class Solution {
static bool compare(int a, int b){
return abs(a) > abs(b);
}
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(), nums.end(), compare);
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 res = 0;
for(int i = 0; i < nums.size(); i++){
res += nums[i];
}
return res;
}
};