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+=1right=min(right,intervals[i][1])return count
划分
class Solution(object):def partitionLabels(self, s):""":type s: str:rtype: List[int]"""# 不能排序# 统计每个字符最后出现的位置# 循环,如果遍历的当前字母的位置和最后出现的位置相同,则找到一个分割点last={}max_last=0result=[]start=0for i in range(len(s)):last[s[i]]=ifor 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+1return result
合并区间
记得排序,记得和result[-1][1]作比较
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