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

leetcode刷题day30|贪心算法Part04重叠区间问题(452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间)

前言:今天的三道题目都是重叠区间的问题。

452. 用最少数量的箭引爆气球

思路:局部最优:当气球出现重叠,一起射,所用弓箭最少;
全局最优:把所有气球射爆所用弓箭最少。
按照起始位置排序,如果气球重叠了,重叠气球中右边边界的最小值之前的区间一定需要一个弓箭。

注意:这个解法的以巧妙之处是一直在比较当前气球的左边界和前一个气球的右边界;如果当前气球的左边界大于前一个气球的右边界,则需要多加一支箭;否则的话,就更新当前气球的右边界为两个气球右边界较短的那一个,再去进行比较,看看是不是还有重叠的气球。

代码如下:

class Solution {public int findMinArrowShots(int[][] points) {if(points.length==0) return 0;int result=1;Arrays.sort(points,(a,b)->Integer.compare(a[0],b[0]));for(int i=1;i<points.length;i++){if(points[i][0]>points[i-1][1]) result++;else points[i][1]=Math.min(points[i][1],points[i-1][1]);}return result;}
}

454. 无重叠区间

思路:这个题和气球题的思路差不多,先根据左边界的值进行排序,遍历i的左边界和i-1的右边界,如果i的左边界小于i-1的右边界,需要删除的区间数加一,并将i和i-1中较小的右边界赋值给i的右边界(贪心:尽量留下右边界小的,减少重叠的概率)。

注意:这个题有一个和气球题不同的点,气球打破之后就没有了且要求重叠区间,因此可以将i和i-1中较小的右边界赋值给i的右边界;但这个题

代码如下:

class Solution {public int eraseOverlapIntervals(int[][] intervals) {if(intervals.length<=1) return 0;Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));int result=0;for(int i=1;i<intervals.length;i++){if(intervals[i][0]<intervals[i-1][1]){result++;intervals[i][1]=Math.min(intervals[i][1],intervals[i-1][1]);}}return result;}
}

763.划分字母区间

这个题目不太有思路。看题解发现在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。
步骤如下:

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

代码如下:

class Solution {public List<Integer> partitionLabels(String s) {int[] edge=new int[26];LinkedList<Integer> result=new LinkedList<>();for(int i=0;i<s.length();i++){edge[s.charAt(i)-'a']=i;}int idx=0;int last=-1;for(int i=0;i<s.length();i++){idx=Math.max(edge[s.charAt(i)-'a'],idx);if(idx==i){result.add(i-last);last=i;}}return result;}
}
http://www.lryc.cn/news/446585.html

相关文章:

  • MQTT客户端实战:从连接到通信。详细说明MQTT客户端和MQTT代理进行通信
  • 【go/方法记录】cgo静态库编译以及使用dlv定位cgo崩溃问题
  • (笔记自用)位运算总结+LeetCode例题:颠倒二进制位+位1的个数
  • 024.PL-SQL进阶—游标
  • 从零开始使用树莓派debian系统使用opencv4.10.0进行人脸识别(保姆级教程)
  • golang qq邮件发送验证码
  • 鸿蒙 OS 开发单词打卡 APP 项目实战 20240922 笔记和源码分享
  • 力扣P1706全排列问题 很好的引入暴力 递归 回溯 dfs
  • 使用Python Pandas导入数据库和文件数据
  • lef 中antenna解释
  • 初试Bootstrap前端框架
  • mysql数据库:超键、候选键、主键与外键
  • 音频转MP3格式困难?如何轻松实现wav转mp3?
  • 基于vue框架的大连盐业有限公司生产管理系统的设计与实现3hk5y(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 《深入理解JAVA虚拟机(第2版)》- 第13章 - 学习笔记【终章】
  • 网络工程师学习笔记——网络互连与互联网(三)
  • 【Tomcat】常见面试题整理 共34题
  • 到时间没回家又不接电话?如何迅速确定孩子的位置?
  • 接口自动化--commons内容详解-02
  • WanFangAi论文写作研究生论文写作神器在线生成真实数据,标注参考文献位置,表格公式代码流程图查重20以内,研究生论文写作技巧
  • cv2.waitkey(30) 按键盘无效
  • 【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解
  • Ubuntu24.04 安装ssh开启22端口及允许root用户远程登录
  • STM32基础学习笔记-DHT11单总线协议面试基础题7
  • Redisson分布式锁的概念和使用
  • uniapp小程序持续获取用户位置信息,后台位置获取
  • 优化算法(五)—梯度下降算法(附MATLAB程序)
  • TypeScript 设计模式之【单例模式】
  • UDP与TCP那个传输更快
  • 如何把PDF样本册转换为网址链接