1005.K次取反后最大化的数组和
链接:1005.K次取反后最大化的数组和
难度:Easy
标签:贪心、数组、排序
简介:返回数组 可能的最大和。
题解 1 - 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;
}
题解 2 - 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);
}