题目描述:
给定一个整数数组 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;
}
};