当前位置: 首页 > news >正文

【刷题日记】最大不重叠区间的数量 leetcode 435

题目描述

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。

求解思路

本题应该使用贪心算法,也就是当出现区间重叠的情况下,使用贪心的思路,选取右区间更加靠前的一个,可以保证和剩余的区间重叠的概率最低,这样考虑下来不重叠的部分就最大

因此第一步是对区间进行排序,排序规则使用一维数组的右边界进行排序,从左向右的方式遍历

  • 第一组和遍历过程中的元组没有交集的情况下,统计不重叠区间的最大值
  • 使用全部元组的数量减去不重叠区间元组的数量, 就可以得到最小需要移除的元组了

解决代码

public int eraseOverlapIntervals(int[][] intervals) {//定义排序比较器if (intervals == null) {return 0;}//统计不重叠的区间个数int notOverlapNum = 1;Arrays.sort(intervals, Comparator.comparingInt(o -> o[1]));int rightEdge = intervals[0][1];for(int k= 1; k< intervals.length; k++) {if (intervals[k][0] >= rightEdge) {rightEdge = intervals[k][1];notOverlapNum++;}}return intervals.length - notOverlapNum;}

题目总结

  • 本题需要注意解决多维二元组的重叠或者不重叠问题时,首先通过自定义比较器实现排序,之后根据排序的数组进行统计和判断
  • 第二点在于贪心算法的运用,本题就是一个合适的场景:当出现区间重叠的时候,一定会减少我们结果集的个数,但是向潜在损失小的方向考虑,就能最优的实现留存最大的结果。我们本题不考虑具体删除的区间,只统计删除的个数,因此使用贪心算法能满足要求

http://www.mrgr.cn/news/37133.html

相关文章:

  • Dockerfile如何使用
  • 【如何学习Python编程?】
  • USB 3.1 Micro-A 与 Micro-B 插头,Micro-AB 与 Micro-B 插座,及其引脚定义
  • 一窥AI大模型奥秘:技术前沿与产业应用双轮驱动
  • Studying-图论包含的算法总结
  • 【VUE】axios组件
  • 绝了,自从用了它,我每天能多摸鱼2小时!
  • 滑动窗口 -- 限制窗口内某元素的数量/种类
  • 深度学习—神经网络基本概念
  • 数据结构——初始树和二叉树
  • Linux(含麒麟操作系统)如何实现多显示器屏幕采集录制
  • 黑马头条day4 自媒体文章自动审核
  • Java2 实用教程(第6版)习题2 第四题
  • C++类和对象第一关
  • jvm专题 之 垃圾回收故障处理工具
  • 详解前驱图与PV操作
  • 第14讲 SLAM:现在与未来
  • Python 入门教程(3)基础知识 | 3.7、pass 关键字
  • Spring项目中的统一结果返回
  • windows电脑git提交告警:LF will be replaced by CRLF the next time Git touches it