力扣刷题 DAY_81 贪心
Leetcode45
链接:力扣 。
题目:
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)
以这种方式修改数组后,返回数组可能的最大和。
说明:
1 <= A.length <= 10000
1 <= K <= 10000
-100 <= A[i] <= 100
示例1:
输入:nums = [4,2,3], k = 1
输出:5
解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。
示例2:
输入:nums = [3,-1,0,2], k = 3
输出:6
解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。
思路:
贪心的思路
局部最优:让绝对值大的负数变为正数,当前数值达到最大。整体最优:整个数组和达到最大。局部最优可以推出全局最优。
那么如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让数组和达到最大。
那么又是一个贪心。局部最优:只找数值最小的正整数进行反转,当前数值可以达到最大(例如正整数数组{5, 3, 1},反转1 得到-1 比 反转5得到的-5 大多了)。全局最优:整个数组和达到最大。
那么本题的解题步骤为:
- 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
- 第二步:从前向后遍历,遇到负数将其变为正数,同时K--
- 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
- 第四步:求和
参考代码:
class Solution {
public:static bool cmp (int a, int b) {return abs(a) > abs(b);}int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end(), cmp);for (int i = 0; i < nums.size(); i++) {if (k > 0 && nums[i] < 0) {nums[i] = - nums[i];k--;}}if (k % 2 == 1) {nums[nums.size() - 1] = -nums[nums.size() - 1];}int result = 0;for (int a : nums) {result += a;}return result;}
};
力扣刷题 DAY_81 贪心相关推荐
- LeetCode力扣刷题——简单易懂的贪心算法
贪心 一.算法解释 采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 贪心算法问题需要满足的条件: (1)最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较 ...
- 力扣刷题pdf(java版本,内含暗黑版和光明版),都在这里了
BAT大佬力扣刷题pdf,都在这里了! 相信很多小伙伴刷题的时候面对力扣上近两千道题目,感觉无从下手! 我找了很久,今天终于让找到了Java版leetcode算法题解笔记,强烈建议先按照本篇介绍pd ...
- 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!
开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...
- 《剑指Offer》力扣刷题笔记(03-10)
<剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...
- 力扣刷题之二叉树的层序遍历
Welcome to you, 每日一刷系列 二叉树的层序遍历 二叉树的层序遍历II 二叉树的右视图 ...
- 『力扣刷题』5275_找出井字棋的获胜者 解题代码
LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...
- 『力扣刷题』5276_不浪费原料的汉堡制作方案 解题代码
LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5276_不浪费原料的汉堡制作方案 * 5276. 不浪费原料的汉堡制作方案 显示英文描述* 用户通过次数212* 用 ...
- 『力扣刷题』5238_找出给定方程的正整数解 解题代码
html: embed_local_images: true embed_svg: true offline: true toc: undefined print_background: false ...
- 力扣刷题全局变量WA,局部变量AC的问题
力扣刷题全局变量WA,局部变量AC问题 题目 原因 题目 golang力扣leetcode 1219.黄金矿工 原因 今天在刷题的时候,遇到一个现象,本地跑测试全部通过,一提交就错错错,非常离谱 然后 ...
- 力扣刷题-前k个高频元素
力扣刷题-前k个高频元素 题目: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2 ...
最新文章
- 设计模式C++实现(7)——外观模式、组合模式
- 实例Python处理XML文件的方法
- Linux expect与Shell交互
- 设计总结:腾讯光子《和平精英》全新UI 2.0如何升级至效果拉满?
- include *.h 和 declare class *; 的区别?
- mysql 排序字段索引吗_Mysql 排序优化与索引使用(转)
- 如何使用nginx配置SSL证书?
- VB禁止使用 Alt-Tab 或 Ctrl-Alt-Del
- Tesseract-OCR识别 学习(一)命令识别
- QCC3040---coredump方法和注意事项
- 请画出使用mapreduce对英文句子_英文写作中有哪些常见的标点符号问题?小心你的essay会被教授diss不专业...
- 公开课:拉筹伯大学:新闻人的网络编辑和发布
- used in key specification without a key length
- 如何编写没有工作经验的简历
- 淘宝标题优化技巧有哪些禁区注意事项
- android 展示pdf文件
- sql server中datetime默认值设置和日期函数
- 吴晓波眼中的2018年
- Bilibili 网页版下载视频 B站下载MP4格式视频(不用下载工具)
- 机器学习数据挖掘笔记_12(对Conjugate Gradient 优化的简单理解)
热门文章
- 微信小程序登录后,用户名显示微信用户,头像显示灰色,用户自己的头像和名称无法正常显示的问题(附解决方案)
- 软件中GA、Release、RC、Beta、Alpha 各版本号的意义
- html在搜索按钮中加放大镜,CSS3 搜索按钮动效 - 放大镜图标变叉叉
- html 滚动条自动最底,让DIV的滚动条自动滚动到最底部 - 4种方法
- 中兴网络设备交换机路由器查看MC-LAG状态检查命令方法
- 计算机的e盘 f盘找不到,求助:急!我的电脑中D盘和E盘不见了
- php 查询数据传值,php-如何在Laravel中传递数据进行查看?
- 期货基础知识——期货期权中英文对照表
- Springboot 注解最全详解
- android系统与苹果手机号码,苹果手机号码怎么导入另一个手机安卓(全程图解其操作流程)...