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

leetcode day31 453+435

453 用最少数量引爆气球

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

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstartxend, 且满足  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]。

示例 2:

输入:points = [[1,2],[3,4],[5,6],[7,8]]
输出:4
解释:每个气球需要射出一支箭,总共需要4支箭。

示例 3:

输入:points = [[1,2],[2,3],[3,4],[4,5]]
输出:2
解释:气球可以用2支箭来爆破:
- 在x = 2处发射箭,击破气球[1,2]和[2,3]。
- 在x = 4处射出箭,击破气球[3,4]和[4,5]。

解题思路:

先用qsort 对二维数组进行从小到大排序

比较函数 (*((int **)a))[0]

int cmp(const void *a,const void *b){

   return ( (*((int **)a))[0] > (*((int ** b))[0] );

}

排序函数a[m][n]

qsort(a,m,sizeof(int*),cmp)

或者qsort(a,m,sizeof(a[0]),cmp)

贪心策略,有重叠部分射一次即可,局部最优。

不重叠:第i个气球的左边界>第i-1个气球的左边界,说明第i个气球不和第i-1个气球一起射,cnt++

重叠:更新第i个气球的右边界为重叠气球的最小右边界

int cmp(const void *a,const void *b){return ((*((int **)a))[0]>(*((int **)b))[0]);
}
int min(int a,int b){if(a>b)return b;else return a;
}
int findMinArrowShots(int** points, int pointsSize, int* pointsColSize) {qsort(points,pointsSize,sizeof(int*),cmp);int cnt=1;for(int i=1;i<pointsSize;i++){//没有重叠的if(points[i][0]>points[i-1][1])cnt++;else{//更新重叠的最小右边界points[i][1]=min( points[i][1],points[i-1][1]);}}return cnt;
}

435 无重叠区间

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 

注意 只在一点上接触的区间是 不重叠的。例如 [1, 2] 和 [2, 3] 是不重叠的。

示例 1:

输入: intervals = [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:

输入: intervals = [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:

输入: intervals = [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

贪心思路:与上一题类似,从小到大对左区间进行排序

有重叠,cnt++,更新end的值为重叠右边界的最小值

没有重叠,更新end的值为当前区间的右边界

//左区间从小到大排序
int cmp(const void *a,const void *b){return ((*((int **)a))[0]>(*((int **)b))[0]);
}
int min(int a,int b){if(a>b)return b;else return a;
}
int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize) {qsort(intervals,intervalsSize,sizeof(int *),cmp);int cnt=0,end=intervals[0][1];for(int i=1;i<intervalsSize;i++){//无重叠,更新右边界endif(intervals[i][0]>=end)end=intervals[i][1];else{cnt++;end=min(end,intervals[i][1]);}}return cnt;
}

相关文章:

leetcode day31 453+435

453 用最少数量引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地…...

C++三大特性之继承

1.继承的概念及定义 回忆封装 C Stack类设计和C设计Stack对比。封装更好&#xff1a;访问限定符类的数据和方法放在一起 -> 避免底层接口的暴露&#xff0c;数据更加的安全&#xff0c;程序的耦合性更高迭代器的设计&#xff0c;封装了容器底层结构&#xff0c;在不暴露底层…...

PyQt QDoubleSpinBox控件用法详解

QDoubleSpinBox 是 PyQt中用于输入浮点数的控件&#xff0c;支持键盘输入和上下箭头调整数值。与QtSpinBox不同&#xff0c;QtSpinBox是用于输入整数的控件。 关键属性和方法 QDoubleSpinBox 的关键属性和方法如下表所示&#xff1a; 方法/属性说明setRange(min, max)设置数…...

解决Vmware 运行虚拟机Ubuntu22.04卡顿、终端打字延迟问题

亲测可用 打开虚拟机设置&#xff0c;关闭加速3D图形 &#xff08;应该是显卡驱动的问题&#xff0c;不知道那个版本的驱动不会出现这个问题&#xff0c;所以干脆把加速关了&#xff09;...

查询Marklogic数据库,因索引配置造成的返回数据count不同的问题

查询Marklogic数据库&#xff0c;因索引配置造成的返回数据count不同的问题 一&#xff0c;问题&#xff1a; 目前由两个MarkLogic DB&#xff0c;其中A表示所有的数据库统称&#xff0c;包含于BCD&#xff1b; 调用查询接口&#xff0c;通过A和B入口且相同的查询条件去查询B…...

ctfshow做题笔记—栈溢出—pwn73、pwn74

目录 一、pwn73(愉快的尝试一下一把梭吧&#xff01;) 二、pwn74(噢&#xff1f;好像到现在为止还没有了解到one_gadget?) 前言&#xff1a; 抽空闲时间继续学习&#xff0c;记录了两道题&#xff0c;pwn74卡了几天哈哈。 一、pwn73(愉快的尝试一下一把梭吧&#xff01;) …...

026-zstd

zstd 以下为Zstandard&#xff08;zstd&#xff09;压缩算法从原理到代码实现的技术调研报告&#xff0c;结合流程图、结构图及完整C代码实现&#xff1a; 一、核心原理与技术架构 1.1 算法原理 Zstd基于LZ77衍生算法与熵编码&#xff08;FSE/Huffman&#xff09;的混合架构&…...

AF3 quat_to_rot函数解读

AlphaFold3 rigid_utils 模块的 quat_to_rot 函数的功能是把四元数转换为旋转矩阵,函数利用预定义的四元数到旋转矩阵的转换表 _QTR_MAT 来简化计算。 理解四元数到旋转矩阵的转换 源代码: _quat_elements = ["a", "b", "c", "d"]…...

Elasticsearch 的搜索功能

Elasticsearch 的搜索功能 建议阅读顺序&#xff1a; Elasticsearch 入门Elasticsearch 搜索&#xff08;本文&#xff09; 1. 介绍 使用 Elasticsearch 最终目的是为了实现搜索功能&#xff0c;现在先将文档添加到索引中&#xff0c;接下来完成搜索的方法。 查询的分类&…...

Vala编成语言教程-构造函数和析构函数

构造函数 Vala支持两种略有不同的构造方案&#xff1a;我们将重点讨论Java/C#风格的构造方案&#xff0c;另一种是GObject风格的构造方案。 Vala不支持构造函数重载的原因与方法重载不被允许的原因相同&#xff0c;这意味着一个类不能有多个同名构造函数。但这并不构成问题&…...

Mybatis-plus配置动态多数据源

前言&#xff1a;微服务架构中&#xff0c;有些模块中可能不同组件用不同数据源&#xff0c;或者做数据库主从集群需要读写分离&#xff0c;动态切换数据源&#xff0c;或不同方法需要不同数据源就需要一个快捷方便的方法。引用动态数据源组件dynamic-datasource-spring-boot-s…...

CSS+JS 堆叠图片动态交互切换

结合DeepSeek提供的代码&#xff0c;终于实现了堆叠两张图片动态循环切换&#xff0c;以下是代码&#xff1a; 通过绝对定位放了两张图片 <div class"col-lg-5" style"z-index: 40; position: relative;"><img src"images/banner_1.png&quo…...

内存检查之Valgrind工具

内存检查之Valgrind工具 Author: Once Day Date: 2025年3月26日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-CSD…...

强大的AI网站推荐(第四集)—— Gamma

网站&#xff1a;Gamma 号称&#xff1a;展示创意的新媒介 博主评价&#xff1a;快速展示创意&#xff0c;重点是展示&#xff0c;在几秒钟内快速生成幻灯片、网站、文档等内容 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x…...

javafx项目结构+代码规范

javafx项目 1. 新建项目&#xff0c;对项目的理解 jdk&#xff1a; 是 Java Development ToolKit 的简称&#xff0c;也就是 Java 开发工具包。JDK 是整个 Java 的核心&#xff0c;包括 Java 运行环境&#xff08;Java Runtime Envirnment&#xff0c;简称 JRE&#xff09;&a…...

国外计算机证书推荐(考证)(6 Sigma、AWS、APICS、IIA、Microsoft、Oracle、PMI、Red Hat)

文章目录 证书推荐1. 六西格玛 (6 Sigma)2. 亚马逊网络服务 (AWS)3. 美国生产与库存控制学会 (APICS)4. 内部审计师协会 (IIA)5. 微软 (Microsoft)6. 甲骨文 (Oracle)7. 项目管理协会 (PMI)8. 红帽 (Red Hat) 证书推荐 1. 六西格玛 (6 Sigma) 介绍&#xff1a;六西格玛是一种…...

黑盒测试与白盒测试详解

黑盒测试和白盒测试是软件测试中两种最基本的测试方法&#xff0c;它们在测试视角、测试重点和适用场景等方面存在显著差异。 一、黑盒测试 1. 基本概念 黑盒测试又称功能测试&#xff0c;将软件视为一个"黑盒子"&#xff0c;不关心内部结构和实现细节&#xff0c;只…...

准确--配置服务器文件数

某些系统可能在 /etc/security/limits.d/ 目录下有额外配置覆盖全局设置。检查是否存在冲突文件&#xff1a; ls /etc/security/limits.d/如果有文件&#xff08;如 90-nproc.conf 或 90-nofile.conf&#xff09;&#xff0c;需编辑或删除这些文件中的冲突配置。 确保系统启用…...

《熔化焊接与热切割作业》考试注意事项

考试前的准备 携带必要的证件和材料&#xff1a;考生需携带身份证、准考证等有效证件&#xff0c;以及考试所需的焊接工具、材料等。确保证件齐全&#xff0c;避免因证件问题影响考试。 提前检查焊接设备和工具&#xff1a;在考试前&#xff0c;考生应仔细检查焊接设备和工具是…...

ROS2的发展历史、核心架构和应用场景

以下是对**ROS2&#xff08;Robot Operating System 2&#xff09;**的发展历史、核心架构和应用场景的详细解析&#xff0c;覆盖其技术演变、关键特性和生态系统&#xff1a; 一、ROS2的诞生背景&#xff1a;从ROS1到ROS2 1. ROS1的历史与局限 ROS1的起源&#xff1a; 2007年…...

[unity 点击事件] 区域响应点击事件,排除子节点区域,Raycast Target 应用

当我打开一个二级弹窗后&#xff0c;希望可以通过点击弹窗以外的区域来关闭该弹窗。一开始我是在弹窗主节点上挂载了一个 button 组件&#xff0c;该 button 注册的点击事件中关闭该弹窗。在子节点&#xff08;一个背景图&#xff09;的image组件上启用 Raycast Target 选项&am…...

鸿蒙生态全解析:应用适配分享

一、鸿蒙系统的技术底座与适配挑战 HarmonyOS NEXT 作为全场景分布式操作系统&#xff0c;通过统一的技术底座和声明式开发框架&#xff0c;实现了 "一次开发&#xff0c;多端部署" 的跨设备协同能力。其核心优势在于&#xff1a; 弹性部署架构&#xff1a;一套系统…...

el-select 可搜索下拉框 在ios、ipad 无法唤出键盘,造成无法输入

下一篇&#xff1a;el-select 可搜索下拉框&#xff0c;选中选项后&#xff0c;希望立即失去焦点&#xff0c;收起键盘&#xff0c;执行其他逻辑 【效果图】&#xff1a;分组展示选项 >【去界面操作体验】 首先&#xff0c;通过 夸克浏览器的搜索: el-select 在 ipad 输入框…...

深度剖析:域名与DNS安全的全方位解读

导语 在互联网的庞大体系中,域名如同我们访问网络资源的“门牌号”,而DNS则像是将门牌号翻译为具体地址的“翻译官”。然而,这看似平常的域名与DNS系统,却面临着诸多安全风险。一旦遭受攻击,可能导致网站无法访问、用户数据泄露等严重后果。了解域名与DNS安全知识,对保障…...

使用ZMQ和protobuf实现C++程序与Python程序的通信

文章目录 背景一 应用场景与需求二 Protobuf: 跨语言数据交换的基石三 通信方案 ZMQ (ZeroMQ) —— 高性能消息中间件四 进阶: 安全性与性能优化五 实践例子: 工厂温度监控系统5.1 场景描述5.2 Protobuf数据结构定义5.3 C数据采集与发布5.4 Python数据接收与可视化5.5 关键实现…...

Linux实现生产者消费者模型

目录 概念及优势 代码实现 概念及优势 生产者消费者模型是一种用于线程同步的模型&#xff0c;在这个模型中有两种角色&#xff0c;生产者生产数据&#xff0c;消费者消费数据。有三种关系&#xff0c;生产者与生产者&#xff0c;消费者与消费者&#xff0c;生产者与消费者。…...

AI驱动下的智能异常处置:海量多元异构数据的挑战与应对

摘要 在QCon北京会议上&#xff0c;AI驱动的智能异常处置成为焦点。会议深入探讨了平台复杂性及处理海量多元异构数据时所面临的挑战&#xff0c;特别是异常识别与根本原因定位的难题。这些挑战要求技术从业者不断优化算法&#xff0c;以提升数据处理效率和准确性。 关键词 …...

Axure设计之中继器表格——拖动列调整位置教程(中继器)

一、原理介绍 实现表格列的拖动排序&#xff0c;主要依赖Axure的动态面板和中继器两大核心功能&#xff1a; 动态面板交互控制 将表格的列标题封装在动态面板中&#xff0c;通过拖拽事件&#xff08;开始、移动、结束&#xff09;捕捉用户操作 在拖拽过程中实时计算鼠标位置&…...

基于大数据的各品牌手机销量数据可视化分析系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;各品牌手机销量数据可视化分析系统当然不能排除在外。基于大数据的各品牌手机销量数据可视化分析系统是在实际应用和软件工程的开发原理之…...

Open CASCADE学习|基于AIS_PointCloud显示点集

定义与用途 AIS_PointCloud是OpenCASCADE中用于表示和管理点云数据的类&#xff0c;能够高效地绘制大量任意彩色点集。它通过Graphic3d_ArrayOfPoints将点数据传递给OpenGL图形驱动程序&#xff0c;以将设定点绘制为“点精灵”数组&#xff0c;且点数据被打包到顶点缓冲区对象…...