力扣-贪心-1005 k次取反后最大化的数组和

思路

找到绝对值最大的,然后如果是负数就变成正的,所有数遍历完之后,有两种情况,一种是k已经为0了,不需要再取反了,一种是所有数都为正数,k不为0,此时对绝对值最小的数操作即可

代码

class Solution {
    

public:
    static bool cmp(int a, int b) { 
        return abs(a) > abs(b); 
    }
    int largestSumAfterKNegations(vector& 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 a : nums)
            res += a;
        return res;
    }
};

你可能感兴趣的:(力扣,#,贪心,leetcode,算法)