贪心四:K 次取反后最大化的数组和

2021-06-10  本文已影响0人  程一刀

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

题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)
以这种方式修改数组后,返回数组可能的最大和。
示例 1: 输入:A = [4,2,3], K = 1 输出:5 解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。
示例 2: 输入:A = [3,-1,0,2], K = 3 输出:6 解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。
示例 3: 输入:A = [2,-3,-1,5,-4], K = 2 输出:13 解释:选择索引 (1, 4) ,然后 A 变为 [2,3,-1,5,4]。
提示:

参考代码:

class Solution {
    static bool cmp(int a,int b) {
        return  abs(a) > abs(b);
    }
public:
    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] = nums[i] * -1;
                k--;
            }
        }
        int result = 0;
        if (k%2 != 0) {
            nums[nums.size()-1] =  nums[nums.size()-1] * -1;
        }
        for (int i=0; i<nums.size();i++) {
            result = result + nums[i];
        }
        return result;
    }
};

参考链接: https://github.com/youngyangyang04/leetcode-master/blob/master/problems/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.md

上一篇下一篇

猜你喜欢

热点阅读