leetcode435. 无重叠区间

贪心计算无重叠的最长区间的长度,之后用总长度减去最长无重叠的长度就是答案
最长无重叠长度计算方法为:
每次取最早结束的那个区间计算,删除和它相交的去区间这样贪心计算出的长度就是最长的

def eraseOverlapIntervals(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: int
        """
        intervals.sort(key = lambda x :x[1])
        n = len(intervals)
        end = intervals[0][1]
        count = 1       #注意这里从1开始因为第一个本身是不相交的
        for i in range(1,n): 
            if intervals[i][0] >= end: #
                count += 1
                end = intervals[i][1]
        return n - count

动态规划,dp定义为以i为终点的最长不相交区间的长度
注意是区间所以动态转移方程:
之前的所有区间里与当前区间不相交的加一再取最大的

def eraseOverlapIntervals(self, intervals):
    """
    :type intervals: List[List[int]]
    :rtype: int
    """
    intervals.sort()
    n = len(intervals)
    dp = [1]*n
    for i in range(n):
        res = 0
        for j in range(i):
            if intervals[j][1] <= intervals[i][0]: 
                dp[i] = max(dp[i],dp[j]+1)
    return n - max(dp)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值