美文网首页
贪心四:K 次取反后最大化的数组和

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

作者: 程一刀 | 来源:发表于2021-06-10 10:06 被阅读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]。
    提示:

    • 1 <= A.length <= 10000
    • 1 <= K <= 10000
    • -100 <= A[i] <= 100

    参考代码:

    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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/mjpjeltx.html