【数组】Leetcode 452. 用最少数量的箭引爆气球【中等】

用最少数量的箭引爆气球

  • 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。

  • 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

  • 给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 。

示例 1:

输入: points = [[10,16],[2,8],[1,6],[7,12]]
输出: 2
解释:气球可以用2支箭来爆破:
-在x = 6处射出箭,击破气球[2,8]和[1,6]。
-在x = 11处发射箭,击破气球[10,16]和[7,12]

解题思路

要解决这个问题,需要明白怎么能覆盖更多的气球,就是要尽可能多地让弓箭覆盖气球的直径区间,每次弓箭一定在某个气球的最右端。
在这里插入图片描述

  • 排序: 首先按照每个气球的右端点进行排序。排序后的气球列表有助于找到最早结束的气球,从而减少弓箭的数量。
  • 遍历和选择: 从排序后的第一个气球开始,选择第一个气球的右端点作为第一支弓箭的位置。 这支弓箭能够覆盖所有与之重叠的气球。 然后继续查找未被覆盖的气球,从第一个未被覆盖的气球开始,重复上述过程。

Java实现

public class MinimumArrowsToBurstBalloons {public int findMinArrowShots(int[][] points) {if (points.length == 0) {return 0;}// 按右端点排序Arrays.sort(points, Comparator.comparingInt(a -> a[1]));int arrows = 1; // 至少需要一支弓箭int arrowPos = points[0][1]; // 第一支弓箭的位置为第一个气球的右端点for (int i = 1; i < points.length; i++) {// 如果当前气球的起点大于弓箭位置,说明需要新的弓箭if (points[i][0] > arrowPos) {arrows++;//更新下一次弓箭的位置为当前元素右边界arrowPos = points[i][1];}}return arrows;}public static void main(String[] args) {MinimumArrowsToBurstBalloons solution = new MinimumArrowsToBurstBalloons();int[][] points1 = {{10, 16}, {2, 8}, {1, 6}, {7, 12}};System.out.println(solution.findMinArrowShots(points1)); // 输出: 2int[][] points2 = {{1, 2}, {3, 4}, {5, 6}, {7, 8}};System.out.println(solution.findMinArrowShots(points2)); // 输出: 4int[][] points3 = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};System.out.println(solution.findMinArrowShots(points3)); // 输出: 2}
}

时间空间复杂度

  • 时间复杂度: O(n log n),其中 n 是气球的数量。主要耗时在排序步骤。
  • 空间复杂度: O(1),除了存储排序后的数组,不需要额外的空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Freeswitch-Python3开发

文章目录 一、Freeswitch如何使用mod_python31.1 Freeswitch和python1.2 Freeswitch版本选择1.3 Freeswitch编译mod_python31.3.1 debian安装python31.3.2 Freeswitch编译mod_python31.3.3 加载 二、如何编写脚本2.1 函数的基本框架2.2 基本使用2.2.1 触发条件2.2.2 默认脚本位…

pycharm更改远程编辑器设置

pycharm的远程编辑器可以分为两个部分&#xff1a;SFTP服务器(用于传输文件&#xff09;和命令行&#xff08;用于控制linux&#xff09;系统。那么当创建完成后&#xff0c;如何才能更改其设置呢&#xff1f; 一、远程SFTP服务器设置 找到导航栏依次点击tools-deployment-co…

运行vue2项目基本过程

目录 步骤1 步骤2 步骤3 补充&#xff1a; 解决方法&#xff1a; node-scss安装失败解决办法 步骤1 安装npm 步骤2 切换淘宝镜像 #最新地址 淘宝 NPM 镜像站喊你切换新域名啦! npm config set registry https://registry.npmmirror.com 步骤3 安装vue-cli npm install…

采用伪代码及C代码演示如何解决脱机最小值问题

采用伪代码及C代码演示如何解决脱机最小值问题 问题背景算法设计伪代码实现C代码实现证明数组正确性使用不相交集合数据结构最坏情况运行时间的紧确界 问题背景 脱机最小值问题涉及到一个动态集合 &#xff08; T &#xff09; &#xff08;T&#xff09; &#xff08;T&…

并网逆变器学习笔记9---VSG控制

参考文献&#xff1a;《新型电力系统主动构网机理与技术路径》 “构网技术一般包含下垂控制&#xff0c;功率同步控制&#xff0c;虚拟同步机控制&#xff0c;直接功率控制&#xff0c;虚拟振荡器控制 等。其中&#xff0c;虚拟同步机技术&#xff0c;即 VSG&#xff0c;因其物…

蓝牙(2):BR/EDR的连接过程;查询(发现)=》寻呼(连接)=》安全建立=》认证=》pair成功;类比WiFi连接过程。

4.2.1 BR/EDR 流程&#xff1a; 查询&#xff08;发现&#xff09;》寻呼&#xff08;连接&#xff09;》安全建立》认证》pair成功 4.2.1.1 查询&#xff08;发现&#xff09;流程Inquiry (discovering) 类比WiFi的probe request/response 蓝牙设备使用查询流程来发现附近的…

Github 2024-05-24 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10Java设计模式:提高开发效率的正规化实践 创建周期:3572 天开发语言:Java协议类型:OtherStar数量:86766 个Fork数量:25959 次关…

探数API统计分享-1949年-2021年中国历年夏粮产量统计报告

​​​​​​​​中国历年夏粮产量​&#xff0c;为1949年到2021年我国每年的夏粮产量数据。2021年&#xff0c;我国夏粮产量为14596万吨&#xff0c;比上年增长2.2%。 数据统计单位为&#xff1a;万吨 。 我国夏粮产量有多少&#xff1f; 2021年&#xff0c;我国夏粮产量为1…

202206青少年软件编程(Python)等级考试试卷(三级)

第 1 题 【单选题】 下图所示, 有一个名为"书目.csv"的文件。 小明针对这个文件编写了 5 行代码,请问, 代码运行到最后打印在屏幕上的结果是? ( ) with open(书目.csv, r, encoding=utf-8) as f:for line in f.readlines

利用Axure模板快速设计,可视化大屏信息大屏,含近200例资源和各类部件

模板类别&#xff1a; **通用模板&#xff1a;**提供基础的布局和设计元素&#xff0c;适用于各种场景。 **行业特定模板&#xff1a;**如农业、医院、销售、能源、物流、政府机关等&#xff0c;针对不同行业提供专业模板。 **数据展示模板&#xff1a;**包括大数据驾驶舱、统…

webgl开发家居设计软件

WebGL是一种在网页浏览器中渲染3D图形的JavaScript API&#xff0c;它基于OpenGL ES标准&#xff0c;允许开发者创建和显示交互式的3D图形。开发基于WebGL的家居设计软件可以为用户提供一种全新的、沉浸式的家居设计体验。以下是开发此类软件的一些关键步骤和特点。北京木奇移动…

2024 Google I/O 宣布正式支持 Kotlin Multiplatform ,那 KMP 是什么?它的未来在哪里?

基于最近一直有人和我提 KMP &#xff0c;那就简单聊聊。 2024 Google I/O 正式官宣了支持 KMP &#xff0c;而一般意义上的 KMP 指的就是 Kotlin Multiplatform &#xff0c;它是 Google Workspace 团队的一项长期「投资」项目&#xff0c;这里有个重点&#xff0c;那就是 Ko…

前端nvm、nodejs、npm、cnpm、yarn安装教程(超详细图文,含卸载旧的nodejs,安装及环境变量配置)

最近换了新电脑&#xff0c;一开始在网上找了一个教程让下载nvm-noinstall.zip 压缩包解压使用&#xff0c;踩坑了&#xff0c;过程复杂最后报错无法用。 后来搜到下文教程&#xff0c;直接使用nvm。exe进行安装&#xff0c;方便快捷。下面这个文章写的很详细&#xff0c;从如何…

谷歌快速收录怎么做?

快速收录顾名思义&#xff0c;就是让新的的网页内容能够迅速被谷歌搜索引擎抓取、索引和显示在搜索结果中&#xff0c;这对于做seo来说非常重要&#xff0c;因为它有助于新发布的内容尽快出现在谷歌的搜索结果中&#xff0c;从而增加网站的流量 想做谷歌快速收录谷歌推荐了几种…

【MySQL02】【 InnoDB 记录存储结构】

文章目录 一、前言二、InnoDB 行格式1. COMPACT 行格式1.1 记录的额外信息1.2 记录的真实数据1.3 综上 2. REDUNDANT 行格式2.1 字段长度偏移列表2.2 记录头信息 3. DYNAMIC 行格式和 COMPPESED 行格式 三、InnoDB 数据页结构1. File Header (文件头部)2. Page Header (页面头部…

移动硬盘不小心制作成启动盘怎么办?别慌,这样解决更轻松

在数字化时代&#xff0c;移动硬盘作为我们存储和携带重要数据的重要设备&#xff0c;其安全性与便利性不言而喻。然而&#xff0c;在日常使用中&#xff0c;我们可能会遇到一些意想不到的情况&#xff0c;比如一不小心将移动硬盘制作成了启动盘。面对这种情况&#xff0c;许多…

HTTP 重定向 状态码3xx

http状态码301代表永久重定向。当服务器收到客户端的请求时&#xff0c;会将其重定向到另一个url&#xff0c;而不是返回请求的资源。通常用于以下情况&#xff1a; 1、当网站的url结构发生变化或网站迁移到新的域名时。 2、当网站上存在重复内容时&#xff0c;可以使用301状态…

go select 原理

编译器会使用如下的流程处理 select 语句&#xff1a; 将所有的 case 转换成包含 channel 以及类型等信息的 runtime.scase 结构体。调用运行时函数 runtime.selectgo 从多个准备就绪的 channel 中选择一个可执行的 runtime.scase 结构体。通过 for 循环生成一组 if 语句&…

1W、2W 3KVAC隔离 宽电压输入 交直两用AC/DC 电源模块——TP01(02)AZ 系列

TP01(02)AZ为客户提供一款超小体积模块式开关电源&#xff0c;该系列模块电源输出功 率为1W、2W&#xff0c;具有极低的空载损耗&#xff0c;低漏电流仅0.1mA&#xff0c;小体积&#xff0c;隔离耐压高达 3KV等特点。产品安全可靠&#xff0c;EMC 性能好&#xff0c;EMC 及安全…

【低照度图像增强系列(7)】RDDNet算法详解与代码实现(同济大学|ICME)

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检测…