当前位置: 首页 > news >正文

1005. Maximize Sum Of Array After K Negations

目录

题目描述

方法一、使用小根堆

方法二、排序

方法三、哈希


题目描述

1005. Maximize Sum Of Array After K Negations

三种方法都是贪心。 

方法一、使用小根堆

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {int sum = std::accumulate(nums.begin(),nums.end(),0);priority_queue<int,vector<int>,std::greater<int>> minHeap(nums.begin(),nums.end());while(k--){int min = minHeap.top();minHeap.pop();minHeap.push(-min);sum -= (2*min);}return sum;}
};

还可以优化一下。处理完负数后,当剩余数字全部是非负数的时候,可以一次处理结束。

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {int sum = std::accumulate(nums.begin(),nums.end(),0);priority_queue<int,vector<int>,std::greater<int>> minHeap(nums.begin(),nums.end());while(k){int min = minHeap.top();if(min>=0){if(k%2==1)sum -=(2*min);break;}minHeap.pop();minHeap.push(-min);sum -= (2*min);k--;}return sum;}
};

方法二、排序

按照绝对值从大到小排序。

class Solution {struct Cmp{bool operator()(int a,int b) const{return abs(a)>abs(b);}};
public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(),nums.end(),Cmp());int n = nums.size();for(int i = 0;i < n;i++){if(k>0 && nums[i] < 0){nums[i]*=-1;k--;}if(k ==0)break;}if(k%2==1) nums[n-1]*=-1;return accumulate(nums.begin(),nums.end(),0);}
};

方法三、哈希

由于-100 <= nums[i] <= 100,故方法二的排序可以用哈希替代。

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {int sum = 0;unordered_map<int,int> count;for(int num:nums){count[num]++;sum += num;}for(int i = -100;i <0;i++){if(count[i] > 0){int operation_cnt = min(count[i],k);sum -= operation_cnt*2*i;k -= operation_cnt;count[i] -= operation_cnt;count[-i]+= operation_cnt;if(k == 0)break;}}if(k>0 && k%2==1 && count[0]==0){for(int i = 0;i <=100;i++){if(count[i]>0){sum -= 2*i;break;}}}return sum;}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/244717.html

相关文章:

  • 如何用python读取大的xml文件,示例为1.9G的xml文件
  • HarmonyOS - UIObserver(无感监听)
  • Windows 安装以及配置Docker全流程 - Docker Toolbox
  • vibe coding 2025工具全景图
  • python打卡day51@浙大疏锦行
  • 如何利用测试Agent自动分析覆盖率报告与缺陷趋势
  • “十五五”时期智慧城市赋能全国一体化数据市场建设:战略路径与政策建议[ 注:本建议基于公开政策文件与行业实践研究,数据引用截至2025年6月11日。]
  • 剑指offer21——反转链表
  • 力扣上C语言编程题:最大子数组和(涉及数组)
  • Qwen3-Embedding-8B:文本嵌入界的“卷王”,多语言检索新标杆!
  • 嵌入式学习笔记 - C语言访问地址的方式,以及指针的进一步理解
  • 简单的五子棋实现简介
  • 6.11本日总结
  • typescript中的泛型
  • 字符串|数组|计算常见函数整理-竞赛专用(从比赛真题中总结的,持续更新中)
  • 使用CSDN作为Markdown编辑器图床
  • 【Python-Day 25】玩转数字:精通 math 与 random 模块,从数学运算到随机抽样
  • 图文教程——Deepseek最强平替工具免费申请教程——国内edu邮箱可用
  • 亚马逊Woot黑五策略,快速提升亚马逊业绩
  • LeetCode - 136. 只出现一次的数字
  • vue3 + ant 实现 tree默认展开,筛选对应数据打开,简单~直接cv
  • Java异步编程难题
  • 渗透测试PortSwigger Labs:遭遇html编码和转义符的反射型XSS
  • 使用Gradle打包springboot项目为JAR包教程
  • SQL进阶之旅 Day 26:分库分表环境中的SQL策略
  • python数据结构和算法(4)
  • 51la查看https统计,悟空统计助力高效运营
  • TensorZero:开源 LLM 应用优化与可观测性平台
  • 如何将照片从Android传输到Mac?
  • Codeforces 2025/6/11 日志