2025-3-12 leetcode刷题情况(贪心算法--区间问题)

一、452.用最少数量的箭引爆气球

1.题目描述

2.代码

3.思路

使用 Arrays.sort 方法对 points 数组按照气球的起始坐标进行排序。这里使用 Integer.compare(a[0], b[0]) 作为比较器,确保气球按起始坐标从小到大排列。将箭的数量 count 初始化为 1,因为至少需要一支箭来开始引爆气球。

从第二个气球开始遍历,对于每个气球 points[i]:如果当前气球的起始坐标 points[i][0] 大于前一个气球的结束坐标 points[i - 1][1],说明这两个气球不重叠,需要额外一支箭来引爆当前气球,因此 count 加 1。如果当前气球和前一个气球重叠,更新当前气球的结束坐标为当前气球和前一个气球结束坐标的最小值,即 points[i][1] = Math.min(points[i][1], points[i - 1][1])。这样做是为了保证后续判断时,能正确处理重叠气球的范围。

遍历结束后,count 即为引爆所有气球所需的最少箭数。

二、435.无重叠区间

1.题目描述

2.代码

3.思路

使用 Arrays.sort 方法对 intervals 数组按照区间的起始位置进行排序。

通过 Integer.compare(a[0], b[0]) 作为比较器,确保区间按起始位置从小到大排列。

将不重叠区间的数量 count 初始化为 1,因为至少有一个区间可以保留。

从第二个区间开始遍历,对于每个区间 intervals[i]:若当前区间的起始位置 intervals[i][0] 小于前一个区间的结束位置 intervals[i - 1][1],说明这两个区间重叠。

此时,将当前区间的结束位置更新为当前区间和前一个区间结束位置的最小值,即 intervals[i][1] = Math.min(intervals[i - 1][1], intervals[i][1]),然后跳过本次循环继续处理下一个区间。若当前区间与前一个区间不重叠,说明找到了一个新的不重叠区间,将 count 加 1。

用区间的总数 intervals.length 减去不重叠区间的数量 count,得到需要移除的最少区间数量并返回。

相关推荐
楽码6 分钟前
概率算法的空乘就坐问题
后端·算法·机器学习
Dontla8 分钟前
git引用概念(git reference,git ref)(简化对复杂SHA-1哈希值的管理)(分支引用、标签引用、HEAD引用、远程引用、特殊引用)
git·算法·哈希算法
做科研的周师兄22 分钟前
中国区域30m/15天植被覆盖度数据集(2010-2022)
大数据·javascript·算法·性能优化·数据分析
BothSavage26 分钟前
尝试使用gocryptfs实现大模型加密部署
算法
我想睡觉26127 分钟前
Python训练营打卡DAY44
开发语言·人工智能·python·深度学习·算法·机器学习
闻缺陷则喜何志丹1 小时前
【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+
c++·算法·图论·二分图·洛谷
CV点灯大师1 小时前
C++算法训练营 Day6 哈希表(1)
c++·算法·面试·跳槽
姜暮儿2 小时前
算法竞赛推荐书单
算法·数学建模
Seven972 小时前
算法题:数组中的第k个最大元素
java·leetcode
鑫鑫向栄3 小时前
[蓝桥杯]最优包含
数据结构·c++·算法·职场和发展·蓝桥杯·深度优先