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 贪心相关推荐

  1. LeetCode力扣刷题——简单易懂的贪心算法

    贪心 一.算法解释 采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 贪心算法问题需要满足的条件: (1)最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较 ...

  2. 力扣刷题pdf(java版本,内含暗黑版和光明版),都在这里了

    BAT大佬力扣刷题pdf,都在这里了! ​相信很多小伙伴刷题的时候面对力扣上近两千道题目,感觉无从下手! 我找了很久,今天终于让找到了Java版leetcode算法题解笔记,强烈建议先按照本篇介绍pd ...

  3. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  4. 《剑指Offer》力扣刷题笔记(03-10)

    <剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...

  5. 力扣刷题之二叉树的层序遍历

                                                      Welcome to you, 每日一刷系列 二叉树的层序遍历 二叉树的层序遍历II 二叉树的右视图 ...

  6. 『力扣刷题』5275_找出井字棋的获胜者 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...

  7. 『力扣刷题』5276_不浪费原料的汉堡制作方案 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5276_不浪费原料的汉堡制作方案 * 5276. 不浪费原料的汉堡制作方案 显示英文描述* 用户通过次数212* 用 ...

  8. 『力扣刷题』5238_找出给定方程的正整数解 解题代码

    html: embed_local_images: true embed_svg: true offline: true toc: undefined print_background: false ...

  9. 力扣刷题全局变量WA,局部变量AC的问题

    力扣刷题全局变量WA,局部变量AC问题 题目 原因 题目 golang力扣leetcode 1219.黄金矿工 原因 今天在刷题的时候,遇到一个现象,本地跑测试全部通过,一提交就错错错,非常离谱 然后 ...

  10. 力扣刷题-前k个高频元素

    力扣刷题-前k个高频元素 题目: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2 ...

最新文章

  1. 设计模式C++实现(7)——外观模式、组合模式
  2. 实例Python处理XML文件的方法
  3. Linux expect与Shell交互
  4. 设计总结:腾讯光子《和平精英》全新UI 2.0如何升级至效果拉满?
  5. include *.h 和 declare class *; 的区别?
  6. mysql 排序字段索引吗_Mysql 排序优化与索引使用(转)
  7. 如何使用nginx配置SSL证书?
  8. VB禁止使用 Alt-Tab 或 Ctrl-Alt-Del
  9. Tesseract-OCR识别 学习(一)命令识别
  10. QCC3040---coredump方法和注意事项
  11. 请画出使用mapreduce对英文句子_英文写作中有哪些常见的标点符号问题?小心你的essay会被教授diss不专业...
  12. 公开课:拉筹伯大学:新闻人的网络编辑和发布
  13. used in key specification without a key length
  14. 如何编写没有工作经验的简历
  15. 淘宝标题优化技巧有哪些禁区注意事项
  16. android 展示pdf文件
  17. sql server中datetime默认值设置和日期函数
  18. 吴晓波眼中的2018年
  19. Bilibili 网页版下载视频 B站下载MP4格式视频(不用下载工具)
  20. 机器学习数据挖掘笔记_12(对Conjugate Gradient 优化的简单理解)

热门文章

  1. 微信小程序登录后,用户名显示微信用户,头像显示灰色,用户自己的头像和名称无法正常显示的问题(附解决方案)
  2. 软件中GA、Release、RC、Beta、Alpha 各版本号的意义
  3. html在搜索按钮中加放大镜,CSS3 搜索按钮动效 - 放大镜图标变叉叉
  4. html 滚动条自动最底,让DIV的滚动条自动滚动到最底部 - 4种方法
  5. 中兴网络设备交换机路由器查看MC-LAG状态检查命令方法
  6. 计算机的e盘 f盘找不到,求助:急!我的电脑中D盘和E盘不见了
  7. php 查询数据传值,php-如何在Laravel中传递数据进行查看?
  8. 期货基础知识——期货期权中英文对照表
  9. Springboot 注解最全详解
  10. android系统与苹果手机号码,苹果手机号码怎么导入另一个手机安卓(全程图解其操作流程)...