读研了,开始用python刷题
今天的题目是力扣 每日一题 57. 插入区间 难度:中等
思路:
- 处理新区间起点,要么在两个老区间之间,要么被一个老区间包含
- 处理新区间中点,同起点一样
我的代码如下
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的答案,且代码更简洁
- 以左边界为度量,将新区间插入 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 = 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