[LeetCode Python] 57. Insert Interval

57. Insert Interval

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        if not intervals:
            return [newInterval]
        size = len(intervals)
        lo, hi = 0, size
        while lo < hi:  # 找到区间左端小于newInterval[0]的最右的下标
            mid = lo + (hi - lo) // 2
            if intervals[mid][0] > newInterval[0]:
                hi = mid
            else:
                lo = lo + 1
        index = lo - 1  # 代表区间左端小于newInterval[0]的最右的下标
        # left, right 表示插入newInterval后,相关区间合并后的左右端
        if index < 0: # 当index = -1,表示newInterval[0] < intervals[0][0]
            left = newInterval[0]
            index += 1 # 加1为了使其等于0,使得下面while循环遍历起点不出错
            indexa = index
        elif intervals[index][1] < newInterval[0]:  #该情况表示第index个区间不参与合并,所以indexa(表示前indexa个区间不参与合并)等于index+1
            left = newInterval[0]
            indexa = index + 1
        else:   #该情况表示第index个区间参与合并,所以indexa等于index
            left = intervals[index][0]
            indexa = index
        while index < size:
            if intervals[index][1] < newInterval[1]:
                index += 1
            elif newInterval[1] <= intervals[index][1] and newInterval[1] >= intervals[index][0]:
                right = intervals[index][1]
                index += 1
                break
            else:
                right = newInterval[1]
                break
        if index == size:   # 包含两种情况 intervals[-1][1] < newInterval[1] 和 newInterval[1] <= intervals[-1][1] and newInterval[1] >= intervals[-1][0]
            right = max(intervals[-1][1], newInterval[1])
        return intervals[:indexa] + [[left, right]] + intervals[index:]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值