美文网首页
【LeetCode】K 次取反后最大化的数组和

【LeetCode】K 次取反后最大化的数组和

作者: MyyyZzz | 来源:发表于2019-03-30 00:38 被阅读0次

题目描述:

给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)

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

示例 1:
输入:A = [4,2,3], K = 1
输出:5
解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。

解题思路

当未到K次取反次数时,有负数则取反负数,没有负数则取反最小数。

代码:

class Solution {
public:
    int largestSumAfterKNegations(vector<int>& A, int K) {
        sort(A.begin(), A.end());
        int i=0,sum=0,cont=0;
        for(i=0; i<A.size(); i++)
        {
            if(i==K)
            {
                cont = 1;
                break;
            }
            if(A[i] < 0)
                A[i] = -A[i];
            else
                break;
        }
        if(cont == 0)
        {
            sort(A.begin(), A.end());
            if((K-i)%2)
            {
                A[0] = -A[0];
            }
        }
        sum = accumulate(A.begin(), A.end(), 0);
        return sum;
    }
};
补充:accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。应包含头文件#include<numeric>

相关文章

网友评论

      本文标题:【LeetCode】K 次取反后最大化的数组和

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