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

题目描述:

给定一个整数数组 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>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,932评论 0 38
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,480评论 3 44
  • 这个不错分享给大家,从扣上看到的,就转过来了 《电脑专业英语》 file [fail] n. 文件;v. 保存文...
    麦子先生R阅读 6,621评论 5 24
  • 绘珞阅读 218评论 0 0