1005. K次取反后最大化的数组和

贪心

import java.util.Arrays;

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {

        /**
         * 先将数组排序,让负数在前面,然后只反转负数
         */
        Arrays.sort(nums);

        for (int i = 0; i < nums.length; i++) {

            if (nums[i] < 0 && k > 0){

                nums[i] = -nums[i];
                k--;
            }
        }

        /**
         * 反转完毕,如果k == 0说明最大的负数都被反转了;k最后剩下偶数次,说明数组元素都是正的
         * 如果k剩余奇数次,说明必须要有一个正数被反转成负数,此时再次排序,反转最小的正数
         */
        if (k % 2 == 1){

            Arrays.sort(nums);
            nums[0] = -nums[0];
        }

        return Arrays.stream(nums).sum();
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/

posted @ 2022-02-25 17:48  振袖秋枫问红叶  阅读(22)  评论(0)    收藏  举报