代码随想录刷题day36

文章介绍了三种与区间操作相关的算法问题:无重叠区间、合并区间和划分字母区间。对于无重叠区间,关键在于按右边界排序并检查重叠;合并区间需按左边界排序并处理重叠部分;划分字母区间涉及收集字母最远下标并计算切割位置。
摘要由CSDN通过智能技术生成
题目:无重叠区间
题解:

1)和用剑射气球很像,但是注意排序的时候应该用右区间排序。

代码:
class Solution(object):
    def eraseOverlapIntervals(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: int
        """
       
        res = 0
        if not intervals:
            return res

        intervals.sort(key = lambda x:x[1])#这个很重要,是按照右区间进行排序,才能够根据有右区间比较左区间来判断是否重合
        print(intervals)
        temp = intervals[0][1]
        for i in intervals[1:]:
            if i[0] < temp:
                res += 1
            else:
                temp = i[1]
        return res
题目:合并区间
题解:

注意两个点:
1)本题要根据左端点来排序,因为这样合并的子区间一定是连续的(本题有一个特殊样例:【3,4】,【5,6】,【7,8】,【1,10】)这样如果按照右边界一定是不正确的,因为还需要回溯。按照左边界就会避免这个问题
2)注意如果已经进入result的区间和下一个区间有重合,那么需要重新赋值result中的最后一个元素。

代码:
        result = []
        if not intervals:
            return result
        intervals.sort(key = lambda x:x[0])#这次按照左边界来排序
        result.append(intervals[0])
        for i in intervals[1:]:
            temp = result[-1]
            if i[0] <= temp[1]:
               result[-1] = [temp[0], max(temp[1], i[1])]#当下一个数据和上一个已经存进result数组的元素有重叠,需要重新赋值
            else:
                result.append(i)
        return result
题目:划分字母区间
题解:

1)遍历两次数组,第一次收集所有字母的最远下标
2)第二次遍历统计之前出现过所有字母的最远距离,如果最远距离和当前遍历到的位置相同,那么就是下一个字符串要切割的位置。

代码:
class Solution(object):
    def partitionLabels(self, s):
        """
        :type s: str
        :rtype: List[int]
        """
        num = {}
        for i in range(len(s)):
            num[s[i]] = i
        left = 0
        right = 0
        res = []
        for i in range(len(s)):
            right = max(right, num[s[i]])
            if right == i:
                res.append(right - left + 1)
                left = i + 1
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值