214.贪心算法:K次取反后最大化的数组和(力扣)

cpp 复制代码
class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) 
    {
        int sum = 0;
        
        // 进行k次取反操作
        while (k > 0)
        {
            // 对数组进行排序
            sort(nums.begin(), nums.end());
            // 将最小的元素取反
            nums[0] = -nums[0];
            // 减少k的值
            k--;
        }
        
        // 计算数组的总和
        for (int num : nums)
        {
            sum += num;
        }
        
        return sum;
    }
};

核心思想

  • 每次都取反数组中绝对值最小的元素,以确保每次取反操作都对数组总和的影响最小化。
  • 通过排序,找到当前数组中的最小元素,并对其进行取反操作。
  • 重复上述步骤,直到完成 k 次取反操作。

考虑 nums = [3, -1, 0, 2]k = 3

  1. 第一次操作:

    • 排序后:[-1, 0, 2, 3]
    • 取反最小元素:[1, 0, 2, 3]
    • k = 2
  2. 第二次操作:

    • 排序后:[0, 1, 2, 3]
    • 取反最小元素:[0, -1, 2, 3]
    • k = 1
  3. 第三次操作:

    • 排序后:[-1, 0, 2, 3]
    • 取反最小元素:[1, 0, 2, 3]
    • k = 0

最后计算总和:1 + 0 + 2 + 3 = 6,返回 6

相关推荐
ahstunwy3 小时前
2023年庐阳区青少年信息学科普日真题- 升降机(lift)
开发语言·c++·算法
wh233z3 小时前
动态规划之——背包DP(进阶篇)
c语言·数据结构·c++·算法·动态规划
努力学习的小趴菜。5 小时前
函数的学习(三)
学习·算法
kimdy12135627725 小时前
25秋招美团笔试测评题型行测解析
开发语言·功能测试·算法·职场和发展
Stark、6 小时前
排序算法--堆排序
算法·排序算法
青春_strive6 小时前
算法:BFS 解决多源最短路问题
算法·宽度优先
好好学习Py7 小时前
两数之和 II(LeetCode)
数据结构·python·算法·leetcode
Mike!8 小时前
C++ STL专题 list的讲解
数据结构·c++·算法·stl·list
摆烂小白敲代码8 小时前
Codeforces Round 963 (Div. 2)
c语言·数据结构·c++·算法·排序算法·codeforces
我明天再来学Web渗透8 小时前
【找出所有稳定的二进制数组 I】python刷题记录
开发语言·数据结构·python·算法