第八章 贪心算法 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
相关推荐
浅念同学几秒前
算法.图论-建图/拓扑排序及其拓展
算法·图论
是小Y啦17 分钟前
leetcode 106.从中序与后续遍历序列构造二叉树
数据结构·算法·leetcode
liuyang-neu27 分钟前
力扣 42.接雨水
java·算法·leetcode
y_dd34 分钟前
【machine learning-12-多元线性回归】
算法·机器学习·线性回归
m0_6312704035 分钟前
标准c语言(一)
c语言·开发语言·算法
万河归海42835 分钟前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio
小周的C语言学习笔记39 分钟前
鹏哥C语言36-37---循环/分支语句练习(折半查找算法)
c语言·算法·visual studio
y_dd40 分钟前
【machine learning-七-线性回归之成本函数】
算法·回归·线性回归
小魏冬琅1 小时前
K-means 算法的介绍与应用
算法·机器学习·kmeans
凌肖战2 小时前
力扣上刷题之C语言实现(数组)
c语言·算法·leetcode