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

力扣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.dtcms.com/a/342511.html

相关文章:

  • pycharm编译器如何快速掌握一个新模块的使用方法
  • K-means 聚类算法学习
  • matplotlib 6 - Gallery Images
  • 在 Linux 中全局搜索 Word 文档内容的完整指南
  • 从零搭建Kubernetes集群:常见踩坑与解决方案
  • Django中的MVC和MVT模式
  • Unity接入DeepSeek实现AI对话功能
  • 解析火语言 RPA 核心功能:让流程自动化更高效​
  • leetcode 76 最小覆盖子串
  • 有关spring-ai的defaultSystem与systemMessage优先级
  • AI 发展的伦理困局:在创新与规范间寻找平衡
  • MYSQL库及表的操作
  • Linux进程间传递文件描述符:为什么不能用FIFO而要用Unix域套接字?
  • 效果驱动复购!健永科技RFID牛场智能称重项目落地
  • 计算两幅图像在特定交点位置的置信度评分。置信度评分反映了该位置特征匹配的可靠性,通常用于图像处理任务(如特征匹配、立体视觉等)
  • 从数据抽取到加载:如何保障ETL中间环节的高效与稳定
  • 缓存与Redis
  • LG P5008 [yLOI2018] 锦鲤抄 Solution
  • 读《精益数据分析》:精益画布——创业与产品创新的高效工具
  • RabbitMQ:消费者可靠性(消费者确认、消费失败处理、业务幂等性)
  • RabbitMQ面试精讲 Day 26:RabbitMQ监控体系建设
  • 1. 准备工作---数据分析编程 - 从入门到精通
  • uniapp 自定义组件封装、easycom匹配规则
  • Go语言变量声明与初始化详解
  • TDengine IDMP 运维指南(管理策略)
  • CRII-Net
  • 【领码课堂】让Java数据检索更智能——Bean Searcher全景解读
  • 从”0“开始学JAVA——第九节下 泛型和集合框架
  • #运维 | 前端 # Linux http.server 实践:隐藏长文件名,简短路径 (http://IP:port/别名 ) 访问
  • AI研究引擎的简单技术实现步骤