跳到主要内容

1005.K次取反后最大化的数组和

链接:1005.K次取反后最大化的数组和
难度:Easy
标签:贪心、数组、排序
简介:返回数组 可能的最大和。

题解 1 - typescript

  • 编辑时间:2021-12-03
  • 执行用时:80ms
  • 内存消耗:39.5MB
  • 编程语言:typescript
  • 解法介绍:排序。
function largestSumAfterKNegations(nums: number[], k: number): number {
const n = nums.length;
nums.sort((a, b) => a - b);
for (let i = 0; i < n && nums[i] < 0 && k > 0; i++) {
nums[i] *= -1;
k--;
}
const sum = nums.reduce((total, num) => total + num, 0);
if ((k & 1) === 0) return sum;
return sum - 2 * Math.min(...nums);
}

题解 2 - c

  • 编辑时间:2021-12-03
  • 内存消耗:5.7MB
  • 编程语言:c
  • 解法介绍:遍历。
int comp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int largestSumAfterKNegations(int* nums, int numsSize, int k){
qsort(nums, numsSize, sizeof(int), comp);
for (int i = 0; i < numsSize && nums[i] < 0 && k > 0; i++) {
nums[i] *= -1;
k--;
}
int sum = 0, min = 10000;
for (int i = 0; i < numsSize; i++) {
sum += nums[i];
if (min > nums[i]) min = nums[i];
}
if ((k & 1) == 0) return sum;
return sum - 2 * min;
}