贪心策略:
每次把绝对值大的负数,转化为整数,如果转换完后,k仍然大于0,那么只需要连续把最小的数,一直转换便可
解题步骤:
1.将数组按照绝对值从大到小排序,注意要按照绝对值的大小
2.从前完后遍历,如果遇到负数将其变为正数,同时k--;
3.如过k仍然大于0,那么翻转变为数值最小的元素,将k用完。
4.求和
排序判断函数,前面要加static
class Solution {
public:
static bool cmp(int a,int b){
return abs(a)>abs(b);
}
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 res=0;
for(int i=0;i<nums.size();i++){
res+=nums[i];
}
return res;
}
};