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

力扣1005:k次取反后最大化的数组和

力扣1005:k次取反后最大化的数组和

  • 题目
  • 思路
  • 代码

题目

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

· 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。

重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。

思路

这道题的关键点在于六个字:可以多次选择!
所以我们想要获得最大和我们就要在k还没到0前先从小到大的把负数变为正数,然后就有两种情况,k耗尽了或者是没有负数了。这时候我们再分情况讨论即可,如果k耗尽了那么最大和毋庸置疑就是当前数组的和,如果是没有负数了那么面对全部都是正数的数组我们就再需要分情况讨论了也就是当前k的值是偶数还奇数。如果k是偶数因为可以多次选择一个位置来取得相反数也就是-1的偶次幂,也就是1那么答案还是当前数组的和,如果k是奇数那就是一个位置的值要变成相反数了。那么选择哪个位置呢?当然是最小数。

代码

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {int n = nums.size();int res = 0;// 按升序进行排序sort(nums.begin(), nums.end());for (int i = 0; i < n; i++) {// 如果有负数并且k大于0说明这个负数可以变成正数if (nums[i] < 0 && k > 0) {nums[i] = -nums[i];k--;}res += nums[i];}// 再排一次,让最小的数排前面sort(nums.begin(), nums.end());if (k % 2 != 0) {// 如果k为奇数我们就要让res加上最小数的相反数// 所以res等于加上两倍的最小数,当然这个最小数不知道是正是负res += -1 * 2 * nums[0];}// 如果k为偶数那么res就不用动,因为可以多次相反// 偶数次就直接抵消了return res;}
};
http://www.xdnf.cn/news/18391.html

相关文章:

  • Elasticsearch官方文档学习-未完待续
  • 三层交换机
  • Bartender 5 多功能菜单栏管理(Mac电脑)
  • 【学习嵌入式day-29-网络】
  • 深入解析C++非类型模板参数
  • 网络打印机自动化部署脚本
  • 软考 系统架构设计师系列知识点之杂项集萃(130)
  • 记录前端菜鸟的日常——小程序内嵌H5页面自定义分享按钮
  • 深入解析HashMap的存储机制:扰动函数、哈希计算与索引定位
  • 信息收集4----(收集网站指纹信息)
  • 20250821 圆方树总结
  • 一、部署LNMP
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码3
  • mac的m3芯使用git
  • 18维度解密·架构魔方:一览无遗的平衡艺术
  • LT8712SX,Type-C/DP1.4 /eDP转 DP1.4/HD-DVI2.0 带音频
  • AXI GPIO S——ZYNQ学习笔记10
  • Java项目:基于SpringBoot和VUE的在线拍卖系统(源码+数据库+文档)
  • K 均值聚类(K-Means)演示,通过生成笑脸和爱心两种形状的模拟数据,展示了无监督学习中聚类算法的效果。以下是详细讲解:
  • 【typenum】 19 类型相同检查(type_operators.rs片段)
  • JavaWeb前端03(Ajax概念及在前端开发时应用)
  • SD 节点学习
  • ZStack Zaku替代VMware Tanzu:六项对比、构建虚拟机+容器一体化架构
  • HTTP 403 错误:后端权限校验机制深度解析
  • Matplotlib数据可视化实战:Matplotlib高级使用技巧与性能优化
  • 用OpencvSharp编写视频录制工具
  • Matplotlib数据可视化实战:Matplotlib数据可视化入门与实践
  • 【Android】悬浮窗清理
  • Pytorch基础学习--张量(生成,索引,变形)
  • 从系统漏洞归零到候诊缩短20%:一个信创样本的效能革命