day36-435. 无重叠区间
435. 无重叠区间
思路:
遇到二维数组的区间问题,先排序。画图,按照start递增排序,如果start相等则按照end递增。
为什么按照start递增排序?保证start有序,每个item的start不会重复。
逆向思维,删除最少数量的区间,即保留最多数量的区间。从左到右先让start从小到大排序,如果cur和下一个元素重合,则选择两个元素中end更小的那个,这样剩余区间更大,可以选择更多元素。如果cur和下一个元素不重合,则都选择。
var eraseOverlapIntervals = function(intervals) {intervals.sort((a,b) => {if(a[0]===b[0]){return a[1]-b[1]}else{return a[0]-b[0]}})console.log(intervals)const que=[intervals[0]]for(let i=1; i<intervals.length; i++){let cur=que[que.length-1]if(cur[1] > intervals[i][0]){if(cur[1]>intervals[i][1]){que.pop()que.push(intervals[i])}}else{que.push(intervals[i])}}console.log(que)return intervals.length-que.length
};
763. 划分字母区间
思路:
统计每个字符出现的start和end位置,如果x字符与y字符区间重合,则更新end位置
难点在于统计字符起止位置时有点浪费空间了,开了两个二维数组,实际上start位置不需要知道。重新扫描一遍s字符串,更新当前字符出现的最远位置即可。
var partitionLabels = function(s) {const mp=new Array(26)for(let i=0; i<mp.length; i++){mp[i]=new Array(2).fill(-1)}for(let i=0; i<s.length; i++){const n=s[i].charCodeAt()-'a'.charCodeAt()// console.log(n)if(mp[n][0]===-1){mp[n]=[i,i]}else{mp[n][1]=i}}// 按照位置sort一下mp.sort((a,b) => {return a[0]-b[0]})const memo=[]for(let x of mp){if(x[0]!==-1){memo.push(x)}}let cur=memo[0], res=[]console.log(memo)for(let i=1; i<memo.length; i++){if(memo[i][0]===-1) continue// 如果不重合 分片 更新curif(cur[1]<memo[i][0]){res.push(cur[1]-cur[0]+1)cur=memo[i]}else{// 如果重合 更新cur的终点cur[1]=Math.max(cur[1], memo[i][1])}console.log(cur)}// 到达终点 打包分片res.push(cur[1]-cur[0]+1)return res
};
56. 合并区间
var merge = function(intervals) {// 先按照start递增intervals.sort((a,b) => {if(a[0]===b[0]){return a[1]-b[1]}return a[0]-b[0]})const que=[intervals[0]]console.log(intervals)for(let i=1; i<intervals.length; i++){// 如果重合 则更新queif(que[que.length-1][1]>=intervals[i][0]){que[que.length-1][1]=Math.max(que[que.length-1][1], intervals[i][1])}else{// 如果不重合 则push进来que.push(intervals[i])}}return que
};
day36-435. 无重叠区间相关推荐
- 通俗易懂:贪心算法(二):区间问题 (力扣435无重叠区间)
看完本文,可以顺便解决leetcode以下题目: 435.无重叠区间(中等) 一.通俗易懂的 贪心算法 |思想 (重复一次~~~) 贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的,从而使得 ...
- 435. 无重叠区间
435. 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触& ...
- 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间
本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...
- Leetcode 435.无重叠区间 (每日一题 20210708 同类型题)
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互重叠 ...
- 435. 无重叠区间(贪心算法)
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互 ...
- 435. 无重叠区间(贪心经典题+思路+详解)
一:题目: 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触" ...
- LeetCode 435. 无重叠区间(贪心/动态规划)
文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 ...
- LeetCode 435. 无重叠区间(贪婪算法)
题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触", ...
- LeetCode 435. 无重叠区间 做题小结
题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相 ...
- leetcode 435. 无重叠区间
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互 ...
最新文章
- 字符串中子序列出现次数
- github--新手使用错误分析
- vue 打印出git提交信息_规范git项目提交并自动生成项目commit log
- spring学习(5):spring简介
- Mac 使用常见问题汇集
- 自组网中继台_家庭组网无线漫游方案--Mesh 组网
- 如何在 Mac 上更改 Safari 背景?
- 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_14_注解_自定义注解_格式本质...
- HyperLPR中文车牌识别
- r语言 与python r中python环境的创建
- iOS16.0:屏幕旋转
- 全球屏占比最高!华为MatePad Pro震撼发布
- 大厂项目实战,让你面试被问到项目时不再哑口无言!
- 说一下HashMap的实现原理?
- 三子棋超详细思路及步骤
- druid.io集群与tranquility对zookeeper的使用(2)
- php7的新特性有哪些,php7新特性有哪些?
- 使用exe4j打包Java桌面程序为exe
- iOS开发 info.plist设置app启动页面
- 高压共轨喷油泵、喷油枪200mpa燃油系统专用 格雷希尔快速连接器G60UHP-M12E-A601
热门文章
- 超级滥的片子——《见龙卸甲》
- 网络音乐,如何走出低俗?
- 艾滋传言让韦唯无缘北京亚运 20年后回首往事
- 剖析分割平衡字符串:一场字符串的平衡术
- 助力战“疫”,主“力”生产:伊利的战“疫”平衡术
- Halcon:通过CFileDialog选择图片
- 百度贴吧息县吧吧主被传审——中国首例贴吧案件
- Nature子刊 | 周集中团队揭示长期气候变暖导致草地土壤微生物多样性降低
- linux lspci信息 详解_Linux硬件管理命令--lspci命令详解
- Java旅游网站管理系统毕业设计、Java旅游线路和景点网站设计与实现 毕设作品参考