452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

题目描述

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

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

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

题目示例

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

解题思路

我们按照左边界从小到大对数组进行排序,因为这样可以保证使得相邻的两个气球最容易重叠。我们按照以下贪心策略求解:

  • 如果当前气球的左边界大于上一个气球的右边界,表示两个气球无重叠部分,我们必须使用一支箭来穿破该气球,所以 result++。
  • 否则,表示两个气球有重叠部分,我们可以用穿破上个气球的那一支箭穿破该气球,所以不需要再多使用一支箭,但是我们需要更新该气球的右边界为上个气球和当前气球的最小右边界,因为只有在这两个气球的最小右边界范围内才可以用一支箭穿破。这样做是为了下一次遍历的时候继续判断下一个气球的左边界和上一个气球的右边界的情况,是否继续有重叠情况。
    在这里插入图片描述

参考代码

class Solution {public int findMinArrowShots(int[][] points) {if(points[0].length == 0) return 0;// 按照左边界从小到大排序// 使用Integer内置比较方法,不会溢出Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));int result = 1;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][1], points[i][1]);}}return result;}
}

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

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

相关文章

带大家做一个,易上手的家常麻辣孜然牛蹄筋

首先 我们从冰箱中拿出牛蹄筋 泡水化开 一根大葱 一块生姜 大葱切段 生姜块 一把花椒 七个左右干辣椒 五个左右大料 三瓣蒜 切成蒜片 放入小碗中单独装起来 两个绿辣椒 首选螺丝椒 垃圾切成片 单独装起来 先将牛蹄筋 倒入锅中 然后加水 将牛蹄筋全部泡住即可 然后起锅烧…

1171. 距离(离线求LCA:tarjan算法)

1171. 距离 - AcWing题库 给出 n 个点的一棵树&#xff0c;多次询问两点之间的最短距离。 注意&#xff1a; 边是无向的。所有节点的编号是 1,2,…,n1。 输入格式 第一行为两个整数 n 和 m。n 表示点数&#xff0c;m 表示询问次数&#xff1b; 下来 n−1 行&#xff0c;每…

RT-Thread: STM32 SPI使用流程

1.添加驱动 ①点开设置界面 ②勾选看门 SPI 驱动 ③点击保存 ④查看添加的驱动文件 drv_spi.c 2.打开驱动头文件定义 ①打开配置文件 ②打开定义 3.打开需要开启的SPI总线 打开 drivers 目录下的 board.h 用SPI搜索&#xff0c;找到如下文字&#xff0c;打开对应的宏。 /*-…

程序运行只会占用到服务器里面一个核心使用,其他核心不工作,是什么问题

随着网络发展&#xff0c;在网络方面开展工作离不开服务器的使用&#xff0c;而在我们日常服务器运行使用过程中&#xff0c;可能会遇到各种问题&#xff0c;这些问题可能会影响服务器的性能和稳定性。最近德迅云安全就有遇到有用户来询问&#xff0c;自己服务器使用上很卡&…

巴厘行记(四)——乌布漫游

欢迎览阅《巴厘行记》系列文章 巴厘行记巴厘行记&#xff08;一&#xff09;——海神庙 巴厘行记&#xff08;二&#xff09;——乌布之夜 巴厘行记&#xff08;三&#xff09;——Auntie和Mudi 巴厘行记&#xff08;四&#xff09;——乌布漫游 巴厘行记&#xff08;五&a…

Pytest单元测试框架

第一章、pytest概述 Pytest is a framework that makes building simple and scalable tests easy. Tests are expressive and readable—no boilerplate code required. Get started in minutes with a small unit test or complex functional test for your application or l…

深入理解与防范C语言中的栈溢出问题

一、引言 栈溢出是计算机安全领域中一个常见的漏洞&#xff0c;特别是在C语言编程中。由于C语言的灵活性和对内存管理的直接操作性&#xff0c;如果程序员在编写代码时不注意&#xff0c;就可能导致栈溢出的发生。本文将全面解析栈溢出的概念、原因、影响以及防范措施。 二、…

springboot+vue3支付宝接口案例-第二节-准备后端数据接口

springbootvue3支付宝接口案例-第二节-准备后端数据接口&#xff01;今天经过2个小时的折腾。准备好了我们这次测试支付宝线上支付接口的后端业务数据接口。下面为大家分享一下&#xff0c;期间发生遇到了一些弯路。 首先&#xff0c;我们本次后端接口使用的持久层框架是JPA。这…

3d合并模型是重名材质---模大狮模型网

当合并3d模型时&#xff0c;如果存在重名的材质&#xff0c;可能会导致加载问题。这是因为3D软件在处理重名材质时可能会出现冲突。你可以尝试以下方法解决这个问题&#xff1a; 重命名材质&#xff1a;检查合并的模型中的材质&#xff0c;确保它们具有唯一的命名。修改重名的材…

Pyroch中transforms 图像增强发方法的应用

1 应用场景 在我们训练模型的时候&#xff0c;有的时候数据不够&#xff0c;就需要通过水平翻转、垂直翻转、镜像、旋转、改变亮度、标准化等方式增加图像的多样性&#xff0c;此时可以调用Pytorch 中的Transforms完成这些操作 2 导入相应的库 from torchvision import tran…

多场景建模:美团HiNet

HiNet: Novel Multi-Scenario & Multi-Task Learning with Hierarchical Information Extraction 背景&#xff1a; 美团的多场景多任务&#xff08;ctr、ctcvr&#xff09; 解决方案 通过分层来分别学习多场景多任务 方案详情 点评&#xff1a;在底层Embedding时用…

如何实现Win系统ssh连接Ubuntu使用vscode远程敲代码

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接…

opencv#35 连通域分析

连通域分割原理 像素领域介绍: 4邻域是指中心的像素与它邻近的上下左右一共有4个像素&#xff0c;那么称这4个像素为中心像素的4邻域。 8邻域是以中心像素周围的8个像素分别是上下左右和对角线上的4个像素。 连通域的定义(分割)分为两种:以4邻域为相邻判定条件的连通域分割和…

让AI帮你说话--GPT-SoVITS教程

有时候我们在录制视频的时候&#xff0c;由于周边环境嘈杂或者录音设备问题需要后期配音&#xff0c;这样就比较麻烦。一个比较直观的想法就是能不能将写好的视频脚本直接转换成我们的声音&#xff0c;让AI帮我们完成配音呢&#xff1f;在语音合成领域已经有很多这类工作了&…

ChatGPT的工作原理

ChatGPT正在做什么...以及为什么它有效? GPT代表"Generative Pre-trained Transformer",是一种基于Transformer架构的生成式预训练模型。只需一次添加一个单词 当ChatGPT生成文本时,它通过不断询问“给定到目前为止的文本,下一个单词应该是什么?”来进行预测。在…

快捷键:IDEA 清理无效导入依赖

快捷键&#xff1a;IDEA 清理无效导入依赖 要批量清理无用的import语句&#xff08;类级别的依赖&#xff09;&#xff0c;可以使用快捷键&#xff1a; Windows/Linux系统&#xff1a;Ctrl Alt OmacOS系统&#xff1a;Cmd Option O 这个快捷键的作用是优化导入&#xff…

1.Mybatis入门

目录 前言 1入门 1.1 入门程序实现 1.2 数据准备 ​编辑 1.3 配置Mybatis 1.4 编写SQL语句 1.5 单元测试 1.6 解决SQL警告与提示 2. JDBC介绍(了解) 2.1 介绍 2.2 代码 2.3 问题分析 2.4 技术对比 3. 数据库连接池 3.1 介绍 3.2 产品 4. lombok 4.1 介绍 4.…

flink源码分析 - jar包中提取主类和第三方依赖

flink版本: flink-1.11.2 提取主类代码位置: org.apache.flink.client.program.PackagedProgram#getEntryPointClassNameFromJar 提取第三方依赖代码位置:org.apache.flink.client.program.PackagedProgram#getJobJarAndDependencies 代码逻辑比较简单&#xff0c;此处不再赘…

AOP+Redisson 延时队列,实现缓存延时双删策略

一、缓存延时双删 关于缓存和数据库中的数据保持一致有很多种方案&#xff0c;但不管是单独在修改数据库之前&#xff0c;还是之后去删除缓存都会有一定的风险导致数据不一致。而延迟双删是一种相对简单并且收益比较高的实现最终一致性的方式&#xff0c;即在删除缓存之后&…

哪些 3D 建模软件值得推荐?

云端地球是一款免费的在线实景三维建模软件&#xff0c;不需要复杂的技巧&#xff0c;只要需要手机&#xff0c;多拍几张照片&#xff0c;就可以得到完整的三维模型&#xff01; 无论是大场景倾斜摄影测量还是小场景、小物体建模&#xff0c;都可以通过云端地球将二维数据向三…