本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

我刚刚开始讲解贪心系列的时候就说了,贪心系列并不打算严格的从简单到困难这么个顺序来讲解。

因为贪心的简单题可能往往过于简单甚至感觉不到贪心,如果我连续几天讲解简单的贪心,估计录友们一定会不耐烦了,会感觉贪心有啥好学的。

但贪心的难题又真的有点难,所以我是简单困难交错着讲的,这样大家就感觉难度适中,而且贪心也没有什么框架和套路,所以对刷题顺序要求没有那么高。

但在贪心系列,我发的题目难度会整体呈现一个阶梯状上升,细心的录友们应该有所体会。

在刚刚讲过的回溯系列中,大家可以发现我是严格按照框架难度顺序循序渐进讲解的,和贪心又不一样,因为回溯法如果题目顺序没选好,刷题效果会非常差!

同样回溯系列也不允许简单困难交替着来,因为前后题目都是有因果关系的,相信跟着刷过回溯系列的录友们都会明白我的良苦用心,哈哈

每个系列都有每个系列的特点,我都会根据特点有所调整,大家看我每天的推送的题目,都不是随便找一个到就推送的,都是先有整体规划,然后反复斟酌具体题目的结果

那么在贪心总结篇里,我按难易程度以及题目类型大体归个类。

贪心大总结正式开始:

贪心理论基础

在贪心系列开篇词关于贪心算法,你该了解这些!中,我们就讲解了大家对贪心的普遍疑惑。

  1. 贪心很简单,就是常识?

跟着一起刷题的录友们就会发现,贪心思路往往很巧妙,并不简单。

  1. 贪心有没有固定的套路?

贪心无套路,也没有框架之类的,需要多看多练培养感觉才能想到贪心的思路。

  1. 究竟什么题目是贪心呢?

Carl个人认为:如果找出局部最优并可以推出全局最优,就是贪心,如果局部最优都没找出来,就不是贪心,可能是单纯的模拟。(并不是权威解读,一家之辞哈)

但我们也不用过于强调什么题目是贪心,什么不是贪心,那就太学术了,毕竟学会解题就行了。

  1. 如何知道局部最优推出全局最优,有数学证明么?

在做贪心题的过程中,如果再来一个数据证明,其实没有必要,手动模拟一下,如果找不出反例,就试试贪心。面试中,代码写出来跑过测试用例即可,或者自己能自圆其说理由就行了

就像是 要用一下 1 + 1 = 2,没有必要再证明一下 1 + 1 究竟为什么等于 2。(例子极端了点,但是这个道理)

相信大家读完关于贪心算法,你该了解这些!,就对贪心有了一个基本的认识了。

贪心简单题

以下三道题目就是简单题,大家会发现贪心感觉就是常识。是的,如下三道题目,就是靠常识,但我都具体分析了局部最优是什么,全局最优是什么,贪心也要贪的有理有据!

  • 贪心算法:分发饼干
  • 贪心算法:K次取反后最大化的数组和
  • 贪心算法:柠檬水找零

贪心中等题

贪心中等题,靠常识可能就有点想不出来了。开始初现贪心算法的难度与巧妙之处。

  • 贪心算法:摆动序列
  • 贪心算法:单调递增的数字

贪心解决股票问题

大家都知道股票系列问题是动规的专长,其实用贪心也可以解决,而且还不止就这两道题目,但这两道比较典型,我就拿来单独说一说

  • 贪心算法:买卖股票的最佳时机II
  • 贪心算法:买卖股票的最佳时机含手续费

两个维度权衡问题

在出现两个维度相互影响的情况时,两边一起考虑一定会顾此失彼,要先确定一个维度,再确定另一个一个维度。

  • 贪心算法:分发糖果
  • 贪心算法:根据身高重建队列

在讲解本题的过程中,还强调了编程语言的重要性,模拟插队的时候,使用C++中的list(链表)替代了vector(动态数组),效率会高很多。

所以在贪心算法:根据身高重建队列(续集)详细讲解了,为什么用list(链表)更快!

大家也要掌握自己所有的编程语言,理解其内部实现机制,这样才能写出高效的算法!

贪心难题

这里的题目如果没有接触过,其实是很难想到的,甚至接触过,也一时想不出来,所以题目不要做一遍,要多练!

贪心解决区间问题

关于区间问题,大家应该印象深刻,有一周我们专门讲解的区间问题,各种覆盖各种去重。

  • 贪心算法:跳跃游戏
  • 贪心算法:跳跃游戏II
  • 贪心算法:用最少数量的箭引爆气球
  • 贪心算法:无重叠区间
  • 贪心算法:划分字母区间
  • 贪心算法:合并区间

其他难题

贪心算法:最大子序和 其实是动态规划的题目,但贪心性能更优,很多同学也是第一次发现贪心能比动规更优的题目。

贪心算法:加油站可能以为是一道模拟题,但就算模拟其实也不简单,需要把while用的很娴熟。但其实是可以使用贪心给时间复杂度降低一个数量级。

最后贪心系列压轴题目贪心算法:我要监控二叉树!,不仅贪心的思路不好想,而且需要对二叉树的操作特别娴熟,这就是典型的交叉类难题了。

贪心每周总结

周总结里会对每周的题目中大家的疑问、相关难点或者笔误之类的进行复盘和总结。

如果大家发现文章哪里有问题,那么在周总结里或者文章评论区一定进行了修正,保证不会因为我的笔误或者理解问题而误导大家,哈哈。

所以周总结一定要看!

  • 本周小结!(贪心算法系列一)
  • 本周小结!(贪心算法系列二)
  • 本周小结!(贪心算法系列三)
  • 本周小结!(贪心算法系列四)

总结

很多没有接触过贪心的同学都会感觉贪心有啥可学的,但只要跟着「代码随想录」坚持下来之后,就会发现,贪心是一种很重要的算法思维而且并不简单,贪心往往妙的出其不意,触不及防!

回想一下我们刚刚开始讲解贪心的时候,大家会发现自己在坚持中进步了很多!

这也是「代码随想录」的初衷,只要一路坚持下来,不仅基础扎实,而且进步也是飞速的。

在这十八道贪心经典题目中,大家可以发现在每一道题目的讲解中,我都是把什么是局部最优,和什么是全局最优说清楚

这也是我认为判断这是一道贪心题目的依据,如果找不出局部最优,那可能就是一道模拟题。

不知不觉又一个系列结束了,同时也是2020年的结束。

一个系列的结束,又是一个新系列的开始,我们将在明年第一个工作日正式开始动态规划,来不及解释了,录友们上车别掉队,我们又要开始新的征程!

我是程序员Carl,可以找我组队刷题,也可以在B站上找到我,本文leetcode刷题攻略已收录,更多精彩算法文章尽在公众号:代码随想录,关注后就会发现和「代码随想录」相见恨晚!

如果感觉对你有帮助,不要吝啬给一个

「代码随想录」精讲了18道力扣上贪心算法经典题目,总结了这些!相关推荐

  1. 如何排版 微信公众号「代码块」之 MarkEditor

    前段时间写过一篇文章 如何排版微信公众号「代码块」,讲的是如何使用浏览器插件 Markdown Here 来排版代码块.虽然用 Markdown Here 排版出来的样式还不错,但存在一个问题,就是代 ...

  2. 「代码家」的学习过程和学习经验分享【转】

    图灵丛书的一句话说的很好,Standing on the shoulders of giants,是的,我们一直站在巨人的肩上,我们起步都在沿着他们的轨迹前行,之后慢慢的在前人的开发基础或者规范上写出 ...

  3. 新功能又来啦!这次是「代码搜索」和视频直播!

    不知不觉又到周五,菌菌又带着新功能来啦! 代码搜索功能发布,提升开发效率 开发一个项目,配置参数是必不可少的步骤,而项目规模越大需要配置的参数就越多.怎么样?是不是已经开始头疼了?dengdengde ...

  4. 如何排版 微信公众号「代码块」

    最近博主刚开通微信公众号「石佳劼的博客」,被微信公众平台的图文编辑器折腾的不轻,如果文章中包含「代码块」,怎么排版都显得杂乱无章.之前一直用 Markdown 写作,从来没有考虑过排版.样式问题,因为 ...

  5. 马斯克在 Clubhouse 上「开房」,讲创业、公司进展,还当了回记者

    聊天室里有人问马斯克,「为什么世界上没有更多的埃隆·马斯克了?」他说,「要我鼓励你吗?别去创业了.」 「如果你还没有 Clubhouse 的邀请码,为了能听到 App 上面名人实时在线讨论的精彩音频, ...

  6. 【代码随想录 | day06】(JavaScript) 哈希表理论基础以及相关算法题

    哈希表理论基础 242.有效的字母异位词 349.两个数组的交集 202.快乐数 两数之和 哈希表理论基础 要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map ...

  7. “十四五”要建设的「交通强国」,会让我们都坐上自动驾驶车么?

    伊瓢 发自 凹非寺 量子位 报道 | 公众号 QbitAI 自动驾驶落地,到底啥时候才能广泛开展? 很多人都把它归于一个「政策」问题. 说道政策问题,前不久正式通过的十四五规划就提到了这一点. 倒是没 ...

  8. 「代码家」的学习过程和学习经验分享

    每天,都会有人在微博上私信我,问我关于学习和成长的问题.这种问题我一般都不会回复某个j,毕竟每个人的情况不一样,每个人对待事物的性格也不一样,我不能夸下海口的说,你看某本书几个月就能如何如何,我能做的 ...

  9. 「代码家」的学习过程和学习经验分享(挺好的一篇文章,转载侵删)

    转自:https://kb.cnblogs.com/page/554260/ 感悟:多写多练,抓住灵感. 每天,都会有人在微博上私信我,问我关于学习和成长的问题.这种问题我一般都不会回复某个j,毕竟每 ...

  10. 这篇把「精准测试」算是讲明白了

    作为测试同学,我们经常在工作中会有这样的困惑:我写的用例真的有效且全面吗,我的测试真的做到有效覆盖了吗?回归阶段我到底需要回归什么,回归验证充分吗?这次的改动到底影响范围有多大?针对以上问题,精准测试 ...

最新文章

  1. 湖北孝感计算机职称考试,2015湖北职称计算机考试报名:孝感职称计算机报名入口...
  2. 一文看懂百度云智峰会:发布两大中台、八大方案,落地细节精准到发丝
  3. Listener 监听器
  4. Access-Control-Allow- 设置跨域资源共享CORS详解
  5. python中的协程:greenlet和gevent
  6. 链式栈的实现(头文件及源程序)
  7. 用Java弹出创建新的消息通知
  8. ie8浏览器自定义工具栏设置教程
  9. ​【月报】Java知音的三月汇总
  10. 栈的应用1——超级计算器(中缀与后缀表达式)C语言
  11. 车牌分割python_Python实现车牌定位及分割
  12. 机器人学导论——笔记(1)
  13. 积累资源,胜于一切项目
  14. Linux usb 5. usbip (USB Over IP) 使用实例
  15. 深度学习跑项目的注意事项
  16. 遛一遛8266的定时器
  17. 第七届校长邦“榜样的力量教育盛典”召开 掌门教育荣膺年度“影响力教育品牌”
  18. 国培_阶段性学习总结
  19. Open CASCADE安装及+MFC
  20. PNN模型理论和实践

热门文章

  1. 根据元素相对位置来控制滚动条
  2. js中对datagrid ,repeater的checkbox进行全选反选
  3. 如何生成静态页面的五种方案
  4. Sitecore8.2 GeoIP - 在8.2的引擎盖下发生了什么?
  5. 【剑指offer】29、顺时针打印矩阵
  6. 环境变量PATH cp命令 mv命令 文档查看cat/more/less/head/tail
  7. 面向对象程序设计的思想的长处
  8. 判断游戏对象是否在摄像机视口的一个方法
  9. HTML中常用的列表标签
  10. 【面试题7】用两个栈实现队列