给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:
可以认为区间的终点总是大于它的起点。
区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
示例 1:
输入: [ [1,2], [2,3], [3,4], [1,3] ]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/non-overlapping-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
也许我们可以每次选择可选区间中开始最早的那个?但是可能存在某些区间开始很早,但是很长,使得我们错误地错过了一些短的区间。或者我们每次选择可选区间中最短的那个?或者选择出现冲突最少的那个区间?这些方案都能很容易举出反例,不是正确的方案。
正确的思路其实很简单,可以分为以下三步:
从区间集合 intvs 中选择一个区间 x,这个 x 是在当前所有区间中结束最早的(end 最小)。
把所有与 x 区间相交的区间从区间集合 intvs 中删除。
重复步骤 1 和 2,直到 intvs 为空为止。之前选出的那些 x 就是最大不相交子集。
把这个思路实现成算法的话,可以按每个区间的 end 数值升序排序,因为这样处理之后实现步骤 1 和步骤 2 都方便很多:
现在来实现算法,对于步骤 1,由于我们预先按照 end 排了序,所以选择 x 是很容易的。关键在于,如何去除与 x 相交的区间,选择下一轮循环的 x 呢?
由于我们事先排了序,不难发现所有与 x 相交的区间必然会与 x 的 end 相交;如果一个区间不想与 x 的 end 相交,它的 start 必须要大于(或等于)x 的 end:
看下代码:
// 不重叠的区间个数
public int intervalSchedule(int[][] intvs) {
if (intvs.length == 0) return 0;
// 按 end 升序排序
Arrays.sort(intvs, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
return a[1] - b[1];
}
});
// 至少有一个区间不相交
int count = 1;
// 排序后,第一个区间就是 x
int x_end = intvs[0][1];
for (int[] interval : intvs) {
int start = interval[0];
if (start >= x_end) {
// 找到下一个选择的区间了
count++;
x_end = interval[1];
}
}
return count;
}
本文主要向大家介绍了java语言的ssm框架实现分页功能的示例代码,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。java web 实现分页功能,分享给大家,具体如下:使用框架:ssm数据库:oracle话说 oracle 的分页查询比 mysql 复杂多了,在这里简单谈一下:查询 前十条数据:SELECT * FROM(SELECT ROWNUM WN,RN.* FROM (SE..._java代码实现oracle分页查询
为解决浏览器后退按钮禁用的方法,在网上搜索了几个方法,虽然可用但是没有太完美的...1、<script language="JavaScript"> javascript:window.history.forward(1); //我目前先用着这个</script>利用JS产生一个“前进”的动作,以抵消后退...
在电脑上远程登录服务器执行程序时,如果关闭远程登录窗口则服务器上运行的程序也会中止,解决办法:使用screen进行远程程序管理。1 安装screen: 大多数linux自带screen,如果没有,可以使用下述命令进行安装sudo apt-get install screen(大多数linux) 或 sudo yum install screen (大多数linux) 或 sudo pacman -..._"type \"screen [-d] -r [pid.]tty.host\" to resume one of them."
报错:Caused by: java.net.BindException: Address already in use: bind出现这个问题主要是因为端口被占用,在网上找到一个很简单快速解决此问题的方法:http://yayihouse.com/yayishuwu/chapter/1843..._caused by: java.net.bindexception: address already in use
#include <iostream>using namespace std;int main(){ int sum=0; int n; cin>>n; while(n!=1){ if(n%2==0){ n/=2; sum++; }else{ n=..._1001 害死人不偿命的(3n+1)猜想 分数 15
事因:今日公司新建一会议室,里面WIFI信号不好,要在其内放一AP增强WIFI信号,开墙打洞再拉一条网线的方案行不通,只好使用无线AP的WDS功能,进行AP间组网。WDS简介:WDS(Wireless Distribution System,无线分布式系统),通过无线链路连接两个或者多个独立的有线局域网或者无线局域网,组建一个互通的网络实现数据访问。WDS的优势:802.11 的无线技术已经在家庭...
gradle+springboot 启动报错记录报错内容解决方案报错内容启动时控制台输出以下错误信息:A problem occurred starting process ‘command ‘D:\Programs\Java\jdk1.8.0_231\bin\java.exe’’java.io.IOException: Cannot run program “D:\Programs\Java\jdk1.8.0_231\bin\java.exe” (in directory “D:\GitCode\_a problem occurred starting process 'comman 文件名或扩展名太长
这里0是指起始行,5是查询5行,第二页起始行就是5,每页也是查询5条数据。起始行=(页大小-1)*行数。分页查询还需要知道一共多少页。分页在读取数据库里的数据需要用,在以后数据库肯定还会有很多数据,一个页面装不下,所以需要分页功能。数据库查询的分页语句是“2.2把需要的架包添加在web下面创建一个lib的文件夹并且添加为库。还得准备工具类没有的找我。总页数=数据总数%每页条数==0?数据总数/每页条数:数据总数/每页条数+1)。2.6DaoImpl实现类。2.3添加emp的实体类。_jsp实现分页功能
1.首先vscode自动支持Emmet语法,从而快速打出html标签。2.Alt+Shift 竖列选择,一次性编辑多个相似标签。3.Alt+ ↑ 向上移动行Shift+Alt + ↓ / ↑ 向上/向下复制行 Copy line up/downCtrl+Shift+K 删除行 Delete lineCtrl+] / [ 缩进/缩进行 Indent/o..._vs code html 选 多行
Python2.7开发的Django项目部署在liunx,遇到的Oracle问题。
#region ---- 数据绑定 ----- private void bd(int pageindex) { int rowcount = 0; int pagesize = 0; int pagecount = 0; decimal cyfzhj = 0; string Slqstring = _gridview无内容显示空行
在编译C语言时有时会遇到这样的错误提示:`true' undeclared (first use in this function) or `false' undeclared (first use in this function)就是说 bool, true, false 都是undeclared,原因很简单,因为真正的C中没有这些关键字,c和早期的c++里没有关键字boo