【数组】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,一经查实,立即删除!

相关文章

golang问题

文章目录 Go里有哪些数据结构是并发安全的&#xff1f;int类型是并发安全的吗&#xff1f;为什么int不是并发安全的&#xff1f; Go如何实现一个单例模式&#xff1f;sync.Once是如何实现的&#xff0c;如何不使用sync.Once实现单例模式&#xff1f;Go语言里的map是并发安全的吗…

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…

取消页面按钮回车事件

html页面登录按钮 <button class"btn btn-success btn-block" id"btnSubmit" data-loading"正在验证登录&#xff0c;请稍候...">登 录</button>js部分 在回车键按下时&#xff0c;阻止默认行为 $(document).keyup(function (event…

采用伪代码及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…

在Juniper SRX系列防火墙上配置DNS

SRX# set system name-server 17.20.0.11 SRX# show system name-server

vue中v-for的key值怎么使用?如何选择?

在 Vue 中&#xff0c;v-for 指令用于渲染列表数据。当使用 v-for 时&#xff0c;强烈建议为每一项提供一个唯一的 key 属性。这个 key 不仅是 Vue 区分节点的标识&#xff0c;也是 Vue 实现列表高效更新的一种机制。 如何使用 key 在 v-for 中&#xff0c;key 应该绑定到列表…

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

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

适配arm架构国产服务器(银河麒麟、中科方德)依赖下载

在计算机硬件领域&#xff0c;两种主流的CPU架构分别是X86和ARM。X86架构&#xff0c;也称为CISC&#xff08;复杂指令集计算机&#xff09;&#xff0c;主要服务于PC和服务器行业。而ARM架构&#xff0c;代表RISC&#xff08;精简指令集计算机&#xff09;&#xff0c;则在移动…

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

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

1.1 什么是internet?

什么是Internet&#xff1a;从具体构成角度 节点 主机及其上运行的应用程序路由器、交换机等网络交换设备  边&#xff1a;通信链路接入网链路&#xff1a;主机连接到互联网的链路主干链路&#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…

Nginx配置文件

当然&#xff0c;让我们一步步来了解Nginx配置文件&#xff0c;即使你是完全的初学者也能轻松跟上。想象一下Nginx是一个超级聪明的接待员&#xff0c;它知道如何处理各种各样的访客请求&#xff0c;而这些规则&#xff0c;我们就写在一个叫做nginx.conf的文件里。 1. 找到配置…

AJAX(JavaScript版本)

目录 一.AJAX简介 二.XMLHttpRequests对象 2.1XMLHttpRequests对象简介 2.2创建XMLHttpRequests对象 2.3定义回调函数 2.4发送请求 2.5XMLHttpRequests对象方法介绍 2.6XMLHttpRequests对象属性 三.向服务器发送请求 3.1发送请求 3.2使用GET还是POST 3.3使用GET来发…