解题思路:
将所有数据按绝对值大小进行从大到小排序,使用sort函数解决
从前往后每遇到一个负数就将其变为绝对值,并将K–,直到循环结束或者K减为0
case 1:K == 0或K为偶数
直接将A[i]求和
case 2:循环结束K>0且为奇数
将A[I]求和,并减去[size-1]*2
class Solution {
public:
static bool cmp(int a, int b)
{
return abs(a)>abs(b);
}
int largestSumAfterKNegations(vector<int>& A, int K) {
int sum = 0;
int size = A.size();
sort(A.begin(),A.end(),cmp);
for(int i=0;i<size;i++)
{
if(A[i]<0 && K>0)
{
A[i] = abs(A[i]);
K--;
}
sum += A[i];
}
if( K % 2 == 1)
{
sum = sum - A[size-1]*2;
}
return sum;
}
};
贪心算法
用于求解一类最优化问题的方法,通过实现局部最优来实现全局最优。
如果在想到某个似乎可行的策略,且自己无法举出反例,那就勇敢实现它,说不定就能行呢