给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

    • 选择某个下标 i 并将 nums[i] 替换为 -nums[i]

    重复这个过程恰好 k 次。可以多次选择同一个下标 i

    以这种方式修改数组后,返回数组 可能的最大和

    示例 1:

    1. 输入:nums = [4,2,3], k = 1
    2. 输出:5
    3. 解释:选择下标 1 nums 变为 [4,-2,3]

    示例 2:

    输入:nums = [3,-1,0,2], k = 3
    输出:6
    解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。
    

    示例 3:

    输入:nums = [2,-3,-1,5,-4], k = 2
    输出:13
    解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4] 。
    

    提示:

    • 1 <= nums.length <= 104
    • -100 <= nums[i] <= 100
    • 1 <= k <= 104

    题解:

    class Solution {
    public:
        static bool cmp(int a, int b) {
            return abs(a) > abs(b);
        }
        int largestSumAfterKNegations(vector<int>& A, int K) {
            sort(A.begin(), A.end(), cmp);       // 第一步
            for (int i = 0; i < A.size(); i++) { // 第二步
                if (A[i] < 0 && K > 0) {
                    A[i] *= -1;
                    K--;
                }
            }
            // 第三步,仅在k还有剩余且为奇数]的情况执行
            if (K % 2 == 1) A[A.size() - 1] *= -1; 
            int result = 0;
            for (int a : A) result += a;        // 第四步
            return result;
        }
    };