class Solution
{
public:
int getNumNeg(vector<int>& nums)
{
int count = 0;
for (auto x : nums)
{
if (x < 0)
count++;
else
break;
}
return count;
}
int getSum(vector<int>& nums)
{
int sum = 0;
for (auto x : nums)
{
sum += x;
}
return sum;
}
int largestSumAfterKNegations(vector<int>& nums, int k)
{
int count = k;
int maxSum = 0;
sort(nums.begin(), nums.end());
int nNeg = getNumNeg(nums); //小于0的数的个数
if (nNeg == 0) //没有负数
{
if (k % 2 == 1)
nums[0] = -nums[0];
}
else if (nNeg >= k) //负数个数比要变换的次数多
{
for (int i = 0; count > 0; count--, i++)
{
nums[i] = -nums[i];
}
}
else if (nNeg < k) //负数个数比要变换的次数少
{
//先将负数全部取反
for (int i = 0, count = nNeg; count > 0; count--, i++)
nums[i] = -nums[i];
//将数组重新排序
sort(nums.begin(), nums.end());
//计算剩下的变换次数
int count = k - nNeg;
if (count % 2 == 1)
nums[0] = -nums[0];
}
maxSum = getSum(nums);
return maxSum;
}
};
LeetCode1005.K次取反后最大化的数组和
最新推荐文章于 2024-08-05 17:00:56 发布