56 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
整体思路:维护一个temp,逐个比较即可
class Solution:
# 板子题了,根据452和435修改
# 注意的几个点:
# 1、什么时候把temp加入result
# 2、temp和i的判断关系,区间是否开闭?
# 举例子的话,从最简单的情况开始
def merge(self, intervals):
if (len(intervals) <= 1):
return intervals
sortedPoints = sorted(intervals, key=lambda k: k[0]) # 将每个气球区间按照起点进行排序
result = []
temp = sortedPoints[0]
sortedPoints.pop(0)
for i in sortedPoints:
# 判断端点的位置 这里一定要注意是>还是>=
if (i[0] > temp[1]):
result.append(temp)
temp = i
if (i[1] > temp[1]):
temp[1] = i[1]
# if (i[1] < temp[1]):
# temp[1] = i[1]
result.append(temp)
return result
力扣第 435 题「 无重叠区间」:
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
是射气球的反向问题,
极端情况:假设有7个不重合区间,要射7次能全射破,则要移除的区间个数为0
用例:
[1,3] [2,4] [4,5] [3,6] 输出:2
class Solution:
def eraseOverlapIntervals(self, intervals):
if(len