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

算法笔记|Day26贪心算法IV

算法笔记|Day26贪心算法IV

  • ☆☆☆☆☆leetcode 452. 用最少数量的箭引爆气球
    • 题目分析
    • 代码
  • ☆☆☆☆☆leetcode 435. 无重叠区间
    • 题目分析
    • 代码
  • ☆☆☆☆☆leetcode 763.划分字母区间
    • 题目分析
    • 代码

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

题目链接:leetcode 452. 用最少数量的箭引爆气球

题目分析

首先对points各个范围按左端点升序排列,依次比较每一个范围左端点与前一个范围右端点。若该范围左端点大于前一个范围右端点,说明没有重叠,需要设计次数count加一;若该范围左端点小于前一个范围右端点,说明有重叠,仅需更新右端点为该范围右端点与前一范围右端点的最小值。

代码

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

提示:
Arrays.sort(points, (a, b) -> { return a[0] - b[0]; });
使用了简单的减法来比较两个点的x坐标。虽然这在大多数情况下可以工作,但它有一个潜在的问题:如果a[0]和b[0]的差值非常大,那么返回的结果可能会是一个大的整数,这可能会导致整数溢出(Integer Overflow)。
Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
使用了Integer.compare方法。这个方法接受两个整数作为参数,并返回一个整数,表示第一个参数与第二个参数的比较结果。如果第一个参数小于第二个参数,则返回负数;如果它们相等,则返回0;如果第一个参数大于第二个参数,则返回正数。使用Integer.compare方法的好处是它避免了整数溢出的问题,在处理大数时更安全,并且由于它是专门为比较整数而设计的,所以代码的可读性也更好。

☆☆☆☆☆leetcode 435. 无重叠区间

题目链接:leetcode 435. 无重叠区间

题目分析

首先对intervals各个区间按左端点升序排列,依次比较每一个区间左端点与前一个区间右端点。若该区间左端点大于前一个范围右端点,说明没有重叠,无需操作;若该区间左端点小于前一个区间右端点,说明有重叠,计数count加一,同时更新右端点为该区间右端点与前一区间右端点的最小值。

代码

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

☆☆☆☆☆leetcode 763.划分字母区间

题目链接:leetcode 763.划分字母区间

题目分析

首先采用哈希数组记录每个字母在该字符串中最后出现的位置,即遍历后序号覆盖。初始left和right赋值为0,依次遍历字符串的每个元素,若遍历到的元素最后出现位置大于当前right值,则更新right值;若遍历到right,则说明得到了一个符合提议的区间,记录该区间长度right-left+1并加到res数组中,同时更新left值为right+1,直至遍历结束。

代码

class Solution {public List<Integer> partitionLabels(String s) {List<Integer> res=new ArrayList<>();int last[]=new int[26];int left=0,right=0;for(int i=0;i<s.length();i++)last[s.charAt(i)-'a']=i;for(int i=0;i<s.length();i++){right=Math.max(right,last[s.charAt(i)-'a']);if(i==right){res.add(right-left+1);left=right+1;}}return res;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [C#]将opencvsharp的Mat对象转成onnxruntime的inputtensor的3种方法
  • 【python报错】‘XXX‘ object is not callable
  • 性能基础之硬盘性能知识必知必会
  • 电容电阻电感关于封装的选型
  • 每天一个数据分析题(四百九十三)- 主成分分析与因子分析
  • C++ STL find 用法
  • Linux 部署YUM仓库及NFS共享服务
  • spring低版本设置cookie的samesite属性
  • roles
  • 力扣热题100_回溯_22_括号生成
  • openstack基本操作
  • windows平台的postgresql主从数据库流备份
  • UNiapp之微信小程序导出Excel
  • PCIe学习笔记(25)
  • OpenHarmony基础组件—图片加载ImageKnife
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 「面试题」如何实现一个圣杯布局?
  • CentOS 7 防火墙操作
  • JavaScript 奇技淫巧
  • laravel with 查询列表限制条数
  • mockjs让前端开发独立于后端
  • PHP面试之三:MySQL数据库
  • Quartz初级教程
  • React系列之 Redux 架构模式
  • Spring框架之我见(三)——IOC、AOP
  • Vue 重置组件到初始状态
  • 计算机常识 - 收藏集 - 掘金
  • 使用 Docker 部署 Spring Boot项目
  • 异步
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 主流的CSS水平和垂直居中技术大全
  • (10)STL算法之搜索(二) 二分查找
  • (13)Hive调优——动态分区导致的小文件问题
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (面试必看!)锁策略
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 6 集成和使用 mongodb
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net 代码性能 - (1)
  • .NET单元测试
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /boot 内存空间不够
  • @Pointcut 使用
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现
  • [Android 数据通信] android cmwap接入点