✅DAY30 贪心算法 | 452. 用最少数量的箭引爆气球 | 435. 无重叠区间 | 763.划分字母区间

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

解题思路:首先把原数组按左边界进行排序。然后比较[i-1]的右边界和[i]的左边界是否重叠,如果重叠,更新当前右边界为最小右边界和[i+1]的左边界判断是重叠。

python 复制代码
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        if len(points) == 0: return 0
        points.sort(key=lambda x: x[0])
        result = 1
        for i in range(1, len(points)):
            if points[i][0] > points[i-1][1]: # 第二段的头和第一段的尾不衔接
                result += 1
            else:
                points[i][1] = min(points[i-1][1], points[i][1]) 
                # else是这两段重叠,但是要判断下一个部分是否重叠
                # 更新尾为最小的右边界,如果下一个[i][0]< [i-1][1],则又有一段重叠
        return result

优化:按右边界排序的方式通常更直观,因为只需要维护一个变量 current_end 表示当前的射击位置,不需要更新区间边界,也减少了不必要的操作。

python 复制代码
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        if not points: return 0
        points.sort(key=lambda x: x[1])  # 按右边界排序
        result = 1
        current_end = points[0][1]
        for i in range(1, len(points)):
            if points[i][0] > current_end:
                result += 1
                current_end = points[i][1]
        return result

435. 无重叠区间

python 复制代码
class Solution:
    def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        if not intervals: return 0

        intervals.sort(key = lambda x:x[0])
        count = 0

        for i in range(1, len(intervals)):
            if intervals[i-1][1] > intervals[i][0]: # 存在重叠
                intervals[i][1] = min(intervals[i-1][1], intervals[i][1])
                count += 1
        return count

763. 划分字母区间

python 复制代码
class Solution:
    def partitionLabels(self, s: str) -> List[int]:
        last_occ = {}
        result = []
        for i, char in enumerate(s):
            last_occ[char] = i
        start_index, end_index = 0, 0
        for i, char in enumerate(s):
            end_index = max(end_index, last_occ[char])#找出当前字符出现的最远位置
            if i == end_index:#i遍历到当前end的最尾部,说明前面的所有出现字符到这停下了
                result.append(end_index - start_index + 1)
                start_index = i + 1
        return result
相关推荐
风筝在晴天搁浅4 分钟前
代码随想录 738.单调递增的数字
数据结构·算法
Miraitowa_cheems16 分钟前
LeetCode算法日记 - Day 108: 01背包
数据结构·算法·leetcode·深度优先·动态规划
源码之家1 小时前
基于python新闻数据分析可视化系统 Hadoop 新闻平台 爬虫 情感分析 舆情分析 可视化 Django框架 vue框架 机器学习 大数据毕业设计✅
大数据·爬虫·python·数据分析·毕业设计·情感分析·新闻
IT油腻大叔1 小时前
DeepSeek-多层注意力计算机制理解
python·深度学习·机器学习
九年义务漏网鲨鱼1 小时前
【多模态大模型面经】现代大模型架构(一): 组注意力机制(GQA)和 RMSNorm
人工智能·深度学习·算法·架构·大模型·强化学习
小呀小萝卜儿1 小时前
2025-11-17 学习记录--Python-机器学习作业:项目1 - PM2.5预测
python·学习·机器学习
闲人编程1 小时前
CPython与PyPy性能对比:不同解释器的优劣分析
python·算法·编译器·jit·cpython·codecapsule
杜子不疼.1 小时前
【C++】深入解析AVL树:平衡搜索树的核心概念与实现
android·c++·算法
小武~1 小时前
Leetcode 每日一题C 语言版 -- 88 merge sorted array
c语言·算法·leetcode
e***U8201 小时前
算法设计模式
算法·设计模式