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

周一

在贪心算法:用最少数量的箭引爆气球中,我们开始讲解了重叠区间问题,用最少的弓箭射爆所有气球,其本质就是找到最大的重叠区间。

按照左边界经行排序后,如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭

如图:

模拟射气球的过程,很多同学真的要去模拟了,实时把气球从数组中移走,这么写的话就复杂了,从前向后遍历重复的只要跳过就可以的。

周二

在贪心算法:无重叠区间中要去掉最少的区间,来让所有区间没有重叠。

我来按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。

如图:

细心的同学就发现了,此题和 贪心算法:用最少数量的箭引爆气球非常像。

弓箭的数量就相当于是非交叉区间的数量,只要把弓箭那道题目代码里射爆气球的判断条件加个等号(认为[0,1][1,2]不是相邻区间),然后用总区间数减去弓箭数量 就是要移除的区间数量了。

把贪心算法:用最少数量的箭引爆气球代码稍做修改,别可以AC本题。

修改后的C++代码如下:

class Solution {
public:// 按照区间左边界从大到小排序static bool cmp (const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.size() == 0) return 0;sort(intervals.begin(), intervals.end(), cmp);int result = 1;for (int i = 1; i < intervals.size(); i++) {if (intervals[i][0] >= intervals[i - 1][1]) { // 需要要把> 改成 >= 就可以了result++; // 需要一支箭}else {  intervals[i][1] = min(intervals[i - 1][1], intervals[i][1]); // 更新重叠气球最小右边界}}return intervals.size() - result;}
};

周三

贪心算法:划分字母区间中我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

这道题目leetcode上标的是贪心,其实我不认识是贪心,因为没感受到局部最优和全局最优的关系。

但不影响这是一道好题,思路很不错,通过字符出现最远距离取并集的方法,把出现过的字符都圈到一个区间里

解题过程分如下两步:

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

如图:

周四

贪心算法:合并区间中要合并所有重叠的区间。

相信如果录友们前几天区间问题的题目认真练习了,今天题目就应该算简单一些了。

按照左边界排序,排序之后局部最优:每次合并都取最大的右边界,这样就可以合并更多的区间了,整体最优:合并所有重叠的区间。

具体操作:按照左边界从小到大排序之后,如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]左边界 < intervals[i - 1]右边界,则一定有重复,因为intervals[i]的左边界一定是大于等于intervals[i - 1]的左边界。

如图:

总结

本周的主题就是用贪心算法来解决区间问题,进过本周的学习,大家应该对区间的各种合并分割有一定程度的了解了。

其实很多区间的合并操作看起来都是常识,其实贪心算法有时候就是常识,哈哈,但也别小看了贪心算法。

在贪心算法:合并区间中就说过,对于贪心算法,很多同学都是:「如果能凭常识直接做出来,就会感觉不到自己用了贪心, 一旦第一直觉想不出来, 可能就一直想不出来了」。

所以还是要多看多做多练习!

「代码随想录」里总结的都是经典题目,大家跟着练就节省了不少选择题目的时间了

就酱,循序渐进选算法,认准「代码随想录」,值得介绍给每一位学习算法的朋友们!

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

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

「leetcode」本周小结!(贪心算法系列四)相关推荐

  1. 「leetcode」最强回溯算法总结篇!历时21天、画了20张树形结构图、14道精选回溯题目精讲

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  2. 八十二、Python | Leetcode贪心算法系列

    @Author:Runsen @Date:2020/7/5 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  3. python leetcode_八十二、Python | Leetcode贪心算法系列

    @Author:Runsen @Date:2020/7/5 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  4. LeetCode刷题笔记(算法思想 四)

    LeetCode刷题笔记(算法思想 四) 七.动态规划 斐波那契数列 70. 爬楼梯 198. 打家劫舍 213. 打家劫舍 II 信件错排 母牛生产 矩阵路径 64. 最小路径和 62. 不同路径 ...

  5. js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!

    不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...

  6. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  7. 消除左递归c++代码_「leetcode」129. 求根到叶子节点数字之和【递归中隐藏着回溯】详解...

    链接 https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/ 思路 本题和113.路径总和II是类似的思路,做完这道题,可以顺便把113. ...

  8. 二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)

    数组理论基础 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来 可能就不是那么回事了. 首先要知道数组在内存中的存储方 ...

  9. 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!

    单纯移除一个节点那还不够,要修剪! ❞ 669. 修剪二叉搜索树 题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/ 给定 ...

  10. Leetcode刷题:贪心算法

    文章目录 一.算法思想 二.分配问题 2.1 Leetcode 455 2.1.1 题目描述 2.1.2 输入输出格式 2.1.3求解思路 2.1.4 代码示例(C++) 2.2 Leetcode 1 ...

最新文章

  1. 373. Find K Pairs with Smallest Sums (java,优先队列)
  2. MAR-8ASM射频放大器测试
  3. VMware Workstation 重启服务脚本 解决连不上ssh问题
  4. 以效率为根本,网易慢跑要做“另类”的TO B业务
  5. git 可视化工具_版本控制可视化神器Gource:简单易上手,效果恰似烟花秀
  6. ArrayList刷题总结
  7. RabbitMQ 普通集群配置_04
  8. Java字节流和字符流区别
  9. 如何对CAD进行区域覆盖
  10. Android学习总结(2)——App客户端与服务器交互中的token
  11. MYSQL常用操作速查
  12. 主要由javascript实现的网页打字小游戏
  13. 无法读源文件或磁盘的处理
  14. OTSU算法 (大津算法)理解代码
  15. Shell之判断周几
  16. 提取epub文件中的图片名字,重命名
  17. 工作邮件的若干注意事项
  18. JSP通过JDBC连接mysql数据库
  19. 【一篇文章搞懂】,字节跳动厂内部超高质量Flutter+Kotlin笔记
  20. 2019中科大计算机考研初试经验总结

热门文章

  1. 浏览器通知--window.Notification
  2. php高并发状态下文件的读写
  3. leetcode(153)寻找旋转排序数组中的最小值
  4. 怎样理解和识别 Linux 中的文件类型
  5. Linux的重定向与管道
  6. C++学习一explicit
  7. VMware vsphere Hypervisor、VMware vsphere和VMware Workstation小记
  8. Machine Learning(Andrew)Week6(上)
  9. Airtool 2 for Mac(Wi-Fi流量捕获工具)支持m1
  10. jquery 获取input checkbox checked属性