读研了,开始用python刷题
今天的题目是力扣 每日一题 57. 插入区间 难度:中等
思路:
- 处理新区间起点,要么在两个老区间之间,要么被一个老区间包含
- 处理新区间中点,同起点一样
我的代码如下
class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:result = []t = 0if 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 = 1if interval[0] > newInterval[0]:result.append([newInterval[0], 0])t = 1if t == 1:if interval[1] < newInterval[1]:result[len(result) - 1][1] = newInterval[1]continueif interval[0] > newInterval[1]:result[len(result) - 1][1] = newInterval[1]result.append(interval)t = 2if interval[0] <= newInterval[1]:result[len(result) - 1][1] = interval[1]t = 2if t == 0:result.append(newInterval)return result
很长,属于想到什么写什么,总体遍历 intervals 数组,每一阶段的处理逻辑不同,使用不同的 t 来区分,总时间40mm,下面是24mm的答案,且代码更简洁
- 以左边界为度量,将新区间插入 intervals 中
- 大鱼吃小鱼的思想,只有当前一个区间“吃”不到后一个区间时,才将该区间加入 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 = eelif s > pre_e:res.append([pre_s, pre_e])pre_s, pre_e = s, eres.append([pre_s, pre_e])return res