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);
}