代码随想录算法训练营Day35 | 435. 无重叠区间、763.划分字母区间、56. 合并区间 | Python | 个人记录向

本文目录

  • 435. 无重叠区间
    • 做题
    • 基于左边界的贪心算法
    • 基于左边界,把452.用最少数量的箭引爆气球代码稍做修改
  • 763.划分字母区间
    • 做题
    • 看文章
  • 56. 合并区间
    • 做题
    • 看文章
  • 以往忽略的知识点小结
  • 个人体会

435. 无重叠区间

代码随想录:435. 无重叠区间
Leetcode:435. 无重叠区间

做题

无思路。

基于左边界的贪心算法

有点难理解,需要仔细琢磨。

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][0] < intervals[i - 1][1]:  # 存在重叠区间
                intervals[i][1] = min(intervals[i - 1][1], intervals[i][1])  # 更新重叠区间的右边界
                count += 1
        
        return count

时间复杂度:O(nlog n) ,有一个快排
空间复杂度:O(n),有一个快排,最差情况(倒序)时,需要n次递归调用。因此确实需要O(n)的栈空间

基于左边界,把452.用最少数量的箭引爆气球代码稍做修改

会452题的话,这样看比较好理解。

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

你可能感兴趣的:(代码随想录算法训练营,算法,python,开发语言)