题目

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。
区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。
示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。
示例 3:输入: [ [1,2], [2,3] ]输出: 0解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

题解

「相信很多同学看到这道题目都冥冥之中感觉要排序,但是究竟是按照右边界排序,还是按照左边界排序呢?」

这其实是一个难点!

按照右边界排序,就要从左向右遍历,因为右边界越小越好,只要右边界越小,留给下一个区间的空间就越大,所以从左向右遍历,优先选右边界小的。

按照左边界排序,就要从右向左遍历,因为左边界数值越大越好(越靠右),这样就给前一个区间的空间就越大,所以可以从右向左遍历。

如果按照左边界排序,还从左向右遍历的话,要处理各个区间右边界的各种情况。

一些同学做这道题目可能真的去模拟去重复区间的行为,这是比较麻烦的,还要去删除区间。

题目只是要求移除区间的个数,没有必要去真实的模拟删除区间!

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

此时问题就是要求非交叉区间的最大个数。

右边界排序之后,局部最优:优先选右边界小的区间,所以从左向右遍历,留给下一个区间的空间大一些,从而尽量避免交叉。全局最优:选取最多的非交叉区间。

局部最优推出全局最优,试试贪心!

这里记录非交叉区间的个数还是有技巧的,如图:

区间,1,2,3,4,5,6都按照右边界排好序。

每次取非交叉区间的时候,都是可右边界最小的来做分割点(这样留给下一个区间的空间就越大),所以第一条分割线就是区间1结束的位置。

接下来就是找大于区间1结束位置的区间,是从区间4开始。「那有同学问了为什么不从区间5开始?别忘已经是按照右边界排序的了」。

区间4结束之后,在找到区间6,所以一共记录非交叉区间的个数是三个。

总共区间个数为6,减去非交叉区间的个数3。移除区间的最小数量就是3。

代码

    public static int eraseOverlapIntervals(int[][] intervals) {if(intervals.length==0) {return 0;}// 按照区间右边界排序Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[1]>o2[1]) {return 1;}else if(o1[1]<o2[1]) {return -1;}return 0;}});int count=1;// 记录非交叉区间的个数int end=intervals[0][1];// 记录区间分割点for (int i = 0; i < intervals.length-1; i++) {if(intervals[i+1][0]>=end) {end=intervals[i+1][1];count++;}}return intervals.length-count;}

参考:https://mp.weixin.qq.com/s/oFOEoW-13Bm4mik-aqAOmw

LeetCode 435. 无重叠区间 做题小结相关推荐

  1. Leetcode 435.无重叠区间 (每日一题 20210708 同类型题)

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互重叠 ...

  2. LeetCode 435. 无重叠区间(贪心/动态规划)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 ...

  3. LeetCode 435. 无重叠区间(贪婪算法)

    题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触", ...

  4. 164. Leetcode 435. 无重叠区间 (贪心算法-贪心区间)

    class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if len(interval ...

  5. leetcode 435. 无重叠区间

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互 ...

  6. LeetCode 435 无重叠区间

    题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没 ...

  7. 2022-4-11 Leetcode 435.无重叠区间 —— 【贪心算法】

    第一版,我本来打算是按照会议室的方式写的.每个房间放入连续的数组下标的序号.后来发现可能会出现同一个数组能够放入多个房间里,所以需要在每一轮开始前对房间进行排序. 本来自信慢慢的觉得自己能过,但是发现 ...

  8. 通俗易懂:贪心算法(二):区间问题 (力扣435无重叠区间)

    看完本文,可以顺便解决leetcode以下题目: 435.无重叠区间(中等) 一.通俗易懂的 贪心算法 |思想 (重复一次~~~) 贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的,从而使得 ...

  9. 435. 无重叠区间

    435. 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触& ...

最新文章

  1. 今日最佳:导师给你指了一个研究方向后...
  2. R语言偏相关或者部分相关性系数计算实战:通过拟合两个回归模型、或者pysch包计算偏相关系数(Partial Correlation)、通过方差分析获得偏相关系数的F统计量(偏F检验、二型检验)
  3. 数据库-事务并发操作问题及并发的控制
  4. python达梦数据库_Python 编程可以访问达梦数据吗?
  5. OpenCV3学习(6.2)——霍夫(Hough)变换:霍夫线变换HoughLine,霍夫圆变换HoughCircles
  6. C#中的三层前馈神经网络,带有图形显示
  7. 网管学习日记-STP
  8. 祝贺VMware中文网站正式发布!
  9. ElasticSearch开发问题汇总(不断更新中)
  10. 全国计算机vfp是什么,vfp是什么-你知VFP是什么东西吗?它是我们大学生必须上的计算机的一个章节的 爱问知识人...
  11. XP/WIN7系统中删除已结束进程托盘图标的方法
  12. 数独大师级技巧_iphone数独大师级难题求解
  13. 微星笔记本的神奇之处
  14. 一个失败的项目管理案例
  15. 中文代码示例视频演示Python入门教程第五章 数据结构
  16. iOS 苹果内购 In-App Purchase 踩过的坑
  17. 【C进阶】qsort函数详解
  18. 解决“E: Package ‘libqtgui4‘ has no installation candidate”无法安装qt4
  19. python英文翻译-python中英文翻译
  20. Linux虚拟机如何修改mysql的数据目录位置

热门文章

  1. matlab解不定,用MATLAB求下面不定方程的解
  2. MySQL索引与索引优化
  3. 百度云BBC SSH连接
  4. muduo源码分析之EventLoop::runInLoop()函数
  5. 抗腐蚀巷道堆垛机立体库货架 拥有WMS信息管理系统的自动化HEGERLS仓储货架
  6. 什么是webview?用在哪里?
  7. TensorFlow搭建VGG-Siamese网络
  8. html把一张图片动态的代码,网站不收录怎么做才能有效果呢?
  9. 优秀的UI设计师是如何提高自己的审美能力?(审美能力差的必看)
  10. CEO们的智慧,塑造你领导力的5条重要品质