第八章 贪心算法 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
相关推荐
橘颂TA11 小时前
【剑斩OFFER】算法的暴力美学——除自身以外数组的乘积
算法·leetcode·职场和发展·结构与算法
源码之家11 小时前
机器学习:基于python租房推荐系统 预测算法 协同过滤推荐算法 房源信息 可视化 机器学习-线性回归预测模型 Flask框架(源码+文档)✅
大数据·python·算法·机器学习·数据分析·线性回归·推荐算法
鑫—萍12 小时前
C/C++精品算法——双指针(1)
c语言·c++·算法
铭哥的编程日记12 小时前
深入浅出蓝桥杯:算法基础概念与实战应用(三)搜索
算法·蓝桥杯·深度优先
2501_9411118912 小时前
低延迟系统C++优化
开发语言·c++·算法
2501_9411119913 小时前
C++中的装饰器模式变体
开发语言·c++·算法
Espresso Macchiato13 小时前
Leetcode 3748. Count Stable Subarrays
算法·leetcode·职场和发展·leetcode hard·leetcode 3748·leetcode周赛476·区间求和
大袁同学13 小时前
【哈希hash】:程序的“魔法索引”,实现数据瞬移
数据结构·c++·算法·哈希算法·散列表
一水鉴天13 小时前
整体设计 全面梳理复盘 之39 生态工具链 到顶级表征及其完全公理化
大数据·人工智能·算法