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

LeetCode K次取反后最大化的数组和(贪心算法)

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

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

重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

以这种方式修改数组后,返回数组 可能的最大和 。

示例 1:

输入:nums = [4,2,3], k = 1
输出:5
解释:选择下标 1 ,nums 变为 [4,-2,3] 。

示例 2:

输入:nums = [3,-1,0,2], k = 3
输出:6
解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。

示例 3:

输入:nums = [2,-3,-1,5,-4], k = 2
输出:13
解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4] 。

提示:

  • 1 <= nums.length <= 104
  • -100 <= nums[i] <= 100
  • 1 <= k <= 104

思路:这是一道很简单的题,用贪心的思路来想(从局部最优到全局最优)

当有负数的时候,就将负数取反变为整数。

当全是正数的时候,如果是k为偶数,我们就不必反复取反,如果k是奇数,只需要将最小的正数取一次反即可。这是第二个贪心的地方

class Solution {
public:
static bool compare(int a,int b)
{return abs(a)>abs(b);
}
int largestSumAfterKNegations(vector<int>& nums, int k) {
//绝对值大小排序
sort(nums.begin(),nums.end(),compare);
//第一次贪心
for(int i = 0;i<nums.size();i++)
{if(nums[i]<0 && k >0){nums[i] *= (-1);  k--;  }
}
//第二次贪心
if(k%2 == 1) nums[nums.size()-1] *= (-1);
//相加
int result = 0;
for(int num: nums) {result += num;}
return result;
}
};

时间复杂度O(nlogn)

由sort函数进行排序为主要的时间复杂度步骤为O(nlogn)

空间复杂度O(1) 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【深度学习基础】MAC pycharm 专业版安装与激活
  • 【银河麒麟服务器操作系统】系统夯死分析及处理建议
  • Java基础(十九):集合框架
  • 每天一个数据分析题(四百二十六)- 总体方差
  • 动态模型管理:Mojo模型的自定义保存与加载控制
  • hutool处理excel时候空指针小记
  • Windows下编译OpenSSL静态库
  • 华为机试题-单车道汽车通行时间-Java
  • CentOS6用文件配置IP模板
  • 东软“引战”国家队 通用技术“补链”大国重器
  • 分类模型的算法性能评价
  • 如何设计一个C语言面向结构体的内存数据库
  • 政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署MuseV (踩完了所有的坑):基于视觉条件并行去噪的无限长度和高保真虚拟人视频生成
  • 简谈设计模式之代理模式
  • 五、 计算机网络(考点篇)
  • [NodeJS] 关于Buffer
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 230. Kth Smallest Element in a BST
  • Android Studio:GIT提交项目到远程仓库
  • Apache的80端口被占用以及访问时报错403
  • CSS魔法堂:Absolute Positioning就这个样
  • es6--symbol
  • Hibernate【inverse和cascade属性】知识要点
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Twitter赢在开放,三年创造奇迹
  • Vue--数据传输
  • 动态规划入门(以爬楼梯为例)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 蓝海存储开关机注意事项总结
  • 聊一聊前端的监控
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (2)STM32单片机上位机
  • (5)STL算法之复制
  • (pycharm)安装python库函数Matplotlib步骤
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (九)One-Wire总线-DS18B20
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Mysql的优化设置
  • (转载)Linux 多线程条件变量同步
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET4.0并行计算技术基础(1)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • 。。。。。
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘