python
class Solution(object):
def eraseOverlapIntervals(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: int
"""
intervals.sort(key=lambda x:x[0])
count=0
# 可以记录重叠子区间的个数,然后让整个数组的长度减去重叠的个数
# 需要去维护右边界是最小的那个,左边界是最大的那个
#left=intervals[0][0]
right=intervals[0][1]
for i in range(1,len(intervals)):
# 如果没有重叠
if intervals[i][0] >= right:
right=intervals[i][1]
# left=intervals[i][0]
else:
count+=1
right=min(right,intervals[i][1])
return count
划分
python
class Solution(object):
def partitionLabels(self, s):
"""
:type s: str
:rtype: List[int]
"""
# 不能排序
# 统计每个字符最后出现的位置
# 循环,如果遍历的当前字母的位置和最后出现的位置相同,则找到一个分割点
last={}
max_last=0
result=[]
start=0
for i in range(len(s)):
last[s[i]]=i
for i in range(len(s)):
max_last=max(max_last,last[s[i]])
if i==max_last:
result.append(max_last-start+1)
start=i+1
return result
合并区间
记得排序,记得和result[-1][1]作比较
python
class Solution(object):
def merge(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: List[List[int]]
"""
# 如果下一个的left 小于上一个的right 那就是合并
# 一定要进行更新
intervals.sort(key=lambda x:x[0])
result=[]
result.append(intervals[0])
for i in range(1,len(intervals)):
# 如果不重叠
if intervals[i][0] > result[-1][1]:
result.append(intervals[i])
else:
result[-1][1]=max(result[-1][1],intervals[i][1])
return result