第八章 贪心算法 part05

贪心一直做的很难受,前两天在忙面试,进度有点拉下了

435. 无重叠区间

python 复制代码
class Solution:
    def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        intervals.sort(key = lambda x: (x[0],x[1]-x[0]))
        result = 1
        for i in range(1, len(intervals)):
            if intervals[i][0] >= intervals[i - 1][1]:
                result += 1     
            else:
                intervals[i][1] = min(intervals[i - 1][1], intervals[i][1]) # 更新重叠气球最小右边界
        return len(intervals)-result

763. 划分字母区间

python 复制代码
class Solution:
    def partitionLabels(self, s: str) -> List[int]:
        last_occurrence = {}  # 存储每个字符最后出现的位置
        for i, ch in enumerate(s):
            last_occurrence[ch] = i

        result = []
        start = 0
        end = 0
        for i, ch in enumerate(s):
            end = max(end, last_occurrence[ch])  # 找到当前字符出现的最远位置
            if i == end:  # 如果当前位置是最远位置,表示可以分割出一个区间
                result.append(end - start + 1)
                start = i + 1

        return result

56. 合并区间

这道题一开始的思路就是,一个for循环,觉得只需要做一次

python 复制代码
interval = intervals[i]
last_interval = intervals[i-1]
if interval[0] <= last_interval[1]:
    last_interval[1] = max(interval[1],last_interval[1])

最后再把修改过的interval删除掉就可以了,但是没考虑到

\[1,4\],\[0,2\],\[3,5\]

\[0,4\],\[3,5\]

只遍历一遍的话,还是会有重复的。

看了题解发现是不能只跟intervals里的元素比较,应该跟结果集里的元素去进行比较。

python 复制代码
class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key = lambda x : x[0])
        a = [intervals[0]]
        for i in range(1,len(intervals)):
            if a[-1][1] >= intervals[i][0]:
                a[-1][1] = max(a[-1][1],intervals[i][1])
            else:
                a.append(intervals[i])
        return a
相关推荐
漫随流水22 分钟前
leetcode算法(513.找树左下角的值)
数据结构·算法·leetcode·二叉树
囊中之锥.1 小时前
机器学习算法详解:DBSCAN 聚类原理、实现流程与优缺点分析
算法·机器学习·聚类
AlenTech1 小时前
152. 乘积最大子数组 - 力扣(LeetCode)
算法·leetcode·职场和发展
Piar1231sdafa1 小时前
基于yolo13-C3k2-RVB的洗手步骤识别与检测系统实现_1
人工智能·算法·目标跟踪
做科研的周师兄1 小时前
【MATLAB 实战】|多波段栅格数据提取部分波段均值——批量处理(NoData 修正 + 地理信息保真)_后附完整代码
前端·算法·机器学习·matlab·均值算法·分类·数据挖掘
天赐学c语言2 小时前
1.18 - 滑动窗口最大值 && 子类的指针转换为父类的指针,指针的值是否会改变
数据结构·c++·算法·leecode
甄心爱学习2 小时前
KMP算法(小白理解)
开发语言·python·算法
wen__xvn2 小时前
牛客周赛 Round 127
算法
大锦终3 小时前
dfs解决FloodFill 算法
c++·算法·深度优先
橘颂TA3 小时前
【剑斩OFFER】算法的暴力美学——LeetCode 200 题:岛屿数量
算法·leetcode·职场和发展