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。

相关推荐
CQU_JIAKE9 分钟前
9.29【A】
算法·深度优先
没落之王37 分钟前
AI在文言文——论文脉复苏对AI的意义
大数据·人工智能·算法
u0111026751 小时前
工具页案例图如何编写 alt让图片说明与处理场景对应
java·前端·javascript·图像处理·人工智能·算法·ai作画
阿狗童鞋1 小时前
数据结构与算法实战指南
数据结构·算法
Navigator_Z1 小时前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode
未来之窗软件服务1 小时前
递归时间复杂度演算T (n)=aT (n/b)+f (n)-东方仙盟
算法·仙盟创梦ide·东方仙盟
垆边人似月.2 小时前
华为机考题:明明的随机数
数据结构·算法·华为
Doubbbbbbble云2 小时前
多维空间索引结构R树与KD树性能对比研究4
算法
海上小飞龙2 小时前
【KMP算法-中篇】next 数组的递推:往前填一位,靠的是往回退几步
算法
keyipatience2 小时前
B树详解:从零构建平衡多路搜索树
数据结构·b树·算法·图搜索