代码随想录算法训练营day36|leetcode435/763/56

Leetcode435无重叠区间

力扣

代码随想录算法训练营day36|leetcode435/763/56_第1张图片

思路:这道题大家可以想象成一个坐标轴 从1-4按照示例来画,重叠的区间一眼就可以看出来是哪些。这是我再iPad上画的图代码随想录算法训练营day36|leetcode435/763/56_第2张图片

可以轻而易举的看出重叠区间是哪些。

题目是要求我们判断需要移除多少个区间 那么这一整个区间才是无重复区间 那么这就等于是我们总共区间的个数-我们没有重叠的区间 得到的结果是不是就是我们需要移除几个区间了?

那么该如何判断两个区间是否重叠呢 

例如[1,2]&[2,3]这里的2是有接触但是区间并不重叠,从这里可以看出 问题在于 区间的end以及下一个区间的start。所以只需要判断这两个就可以 .如果说是这两个呢[1,2],[3,4]?他们是重叠区间吗 ?这里可以看出 第一个区间的end是小于下一个的start。那么条件就出来了 

如果end

代码:

def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        if len(intervals)==0:
            return 0 
        #按照右边界 排序,右边界越小 ,那么给下一个区间留出来的位置就越多
        intervals.sort(key=lambda x:x[1])
        count =1 #记录非交叉区间的个数 
        end = intervals[0][1]#记录区间的分割节点
        for i in range(1,len(intervals)):
            if end<=intervals[i][0]:
                count+=1
                end = intervals[i][1]
        return len(intervals)-count

先打个卡哈哈哈哈  后续慢慢补 最近期末考试!!!!

你可能感兴趣的:(python)