Leecode 57

在这里插入图片描述
参考上一题 Leecode 56
只需要将newInterval添加到intervals中,再排个序,然后使用leecode 56中的代码就好。因为除了添加了一个区间之外,57题与56题之间没有区别(就当是复习一下上一题的代码)。

class Solution(object):
    def insert(self, intervals, newInterval):
        """
        :type intervals: List[List[int]]
        :type newInterval: List[int]
        :rtype: List[List[int]]
        """
        intervals.append(newInterval)   # 添加新区间
        intervals.append([100000, 100000])  # 因为是从下标1开始,需添加一个很大的区间,这样就省去了边界条件
        intervals.sort()   # 排序,使得区间的起始值递增,则只需记录结束值
        L = []
        flag = 0
        end = intervals[0][1]  #  记下第一个区间的结束值
        for i in range(1, len(intervals)):
            if end >= intervals[i][0]:  # 如果上一时刻与当前区间有重叠,(注意这里的上一时刻指的是当前区间前面的所有区间,则记下上一时刻的起始值(最开始产生重叠的起始值)),则保存当前区间的结束值与上一时刻的结束值最大的那一个
                if flag == 0:   # 标记是否产生重叠
                    start = intervals[i-1][0]
                    flag = 1
                end = max(end, intervals[i][1])
            else:  # 上一时刻与当前时刻并未产生重叠
                if flag == 0:   # 并且之前也并未重叠,则直接保存上一区间
                    start, end = intervals[i-1][0], intervals[i-1][1]
                    L.append([start, end])
                else:   # 之前发生了重叠,保存最终重叠区间
                    L.append([start, end])
                    flag = 0
                end = intervals[i][1]  # 结束值从当前区间重新开始
        return L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值