每日一题 57. 插入区间

读研了,开始用python刷题

今天的题目是力扣 每日一题 57. 插入区间 难度:中等
每日一题 57. 插入区间_第1张图片
思路:

  1. 处理新区间起点,要么在两个老区间之间,要么被一个老区间包含
  2. 处理新区间中点,同起点一样

我的代码如下

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        result = []
        t = 0
        if len(intervals) == 0:
            return [newInterval]
        for interval in intervals:
            if t == 2:
                result.append(interval)
            if t == 0:
                if interval[1] < newInterval[0]:
                    result.append(interval)
                if interval[0] <= newInterval[0] and interval[1] >= newInterval[0]:
                    result.append([interval[0], 0])
                    t = 1
                if interval[0] > newInterval[0]:
                    result.append([newInterval[0], 0])
                    t = 1
            if t == 1:
                if interval[1] < newInterval[1]:
                    result[len(result) - 1][1] = newInterval[1]
                    continue
                if interval[0] > newInterval[1]:
                    result[len(result) - 1][1] = newInterval[1]
                    result.append(interval)
                    t = 2
                if interval[0] <= newInterval[1]:
                    result[len(result) - 1][1] = interval[1]
                    t = 2
        if t == 0:
            result.append(newInterval)
        return result   

很长,属于想到什么写什么,总体遍历 intervals 数组,每一阶段的处理逻辑不同,使用不同的 t 来区分,总时间40mm,下面是24mm的答案,且代码更简洁

  1. 以左边界为度量,将新区间插入 intervals 中
  2. 大鱼吃小鱼的思想,只有当前一个区间“吃”不到后一个区间时,才将该区间加入 result 中,否则“吃”掉它增加该区间的有边界
class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        intervals.append(newInterval)
        intervals.sort(key=lambda x:x[0])
        res = []
        pre_s, pre_e = intervals[0][0], intervals[0][1]
        for s, e in intervals[1:]:
            if s <= pre_e and e > pre_e:
                pre_e = e
            elif s > pre_e:
                res.append([pre_s, pre_e])
                pre_s, pre_e = s, e
        res.append([pre_s, pre_e])
        return res

你可能感兴趣的:(用Python刷力扣,python,开发语言)