示例代码

struct Cmp{
    bool operator()(int a,int b){
        return abs(a)>abs(b);
    }
};
class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        int len=nums.size();
        //第一步:按照数组绝对值从大到小进行排序
        sort(nums.begin(),nums.end(),Cmp());
        for(int i=0;i<len;i++){
            //第二步:从前向后遍历,遇到负数将其变为正数,同时k--
            if(nums[i]<0&&k){
                nums[i]=-nums[i];
                k--;
            }
        }
        //第三步:如果k还大于0反复转变数值最小的元素,将k用完
        //剩余次数为奇数的时候(为偶数时可以互相抵消,不用处理)
        if(k%2){
            nums[len-1]=-nums[len-1];
        }
        //第四步:求和
        int res=0;
        for(int num:nums){
            res+=num;
        }
        return res;
    }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

效果展示

LeetCode---1005. K 次取反后最大化的数组和(注意要按照绝对值的大小从大到小进行排序)_i++