

考虑到这几种情况

但其实按绝对值从大到小排序,就可以仅用少量的判断实现上述情况,具体代码如下
class Solution {
private:
static bool cmp(int a, int b) {
return abs(a) > abs(b);
}
public:
int largestSumAfterKNegations(vector<int>& A, int K) {
// 1.按绝对值从大到小排列
sort(A.begin(), A.end(), cmp);
int sum = 0;
for (auto& num : A) {
// 2.负值变正
if (num < 0 && K > 0) {
num *= -1;
K--;
}
sum += num;
}
// 3.处理K > A.size()情况
if (K > 0 && K % 2 == 1) sum -= 2 * A[A.size() - 1];
return sum;
}
};