【11月打卡~Leetcode每日一题】57. 插入区间(难度:困难)

57. 插入区间
【11月打卡~Leetcode每日一题】57. 插入区间(难度:困难)_第1张图片
模拟法:分三种情况,①指定区间在当前区间右边(即未合并)②指定区间在当前区间左边(即未合并或已合并)③指定区间与当前区间有重合(即正在合并)

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        ans,flag = list(),False #flag表示是否已经插入
        a,b = newInterval
        for i in range(len(intervals)):
            x,y = intervals[i]
            if a>y: #第1种情况
                ans.append([x,y])
            elif x>b: #第2种情况
                if not flag:
                    ans.append([a,b])
                    ans.append([x,y])
                    flag = True
                else:
                    ans.append([x,y])
            else: #第三种情况
                a = min(a,x)
                b = max(b,y)
        if not flag:
            ans.append([a,b])
        return ans
          

时间复杂度O(n),空间复杂度O(1),应该是最优解

你可能感兴趣的:(模拟/遍历,算法,数据结构,python,leetcode)