![](https://img-blog.csdnimg.cn/direct/3a6d4811e0344161bf1ee2163b1ac5d1.png)
一旦有重叠区域,则用min更新右边界
python
class Solution(object):
def findMinArrowShots(self, points):
"""
:type points: List[List[int]]
:rtype: int
"""
points.sort(key=lambda x:x[0])
if len(points)==0:
return 0
count = 1
for i in range(1, len(points)):
if points[i][0] > points[i-1][1]:
count += 1
else:
points[i][1] = min(points[i-1][1],points[i][1])
return count
![](https://img-blog.csdnimg.cn/direct/e334f9f52ee14b90b907357b2cbab9ce.png)
跟上题一模一样
python
class Solution(object):
def eraseOverlapIntervals(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: int
"""
intervals.sort(key=lambda x:x[0])
if len(intervals)==0:
return 0
count = 0
for i in range(1, len(intervals)):
if intervals[i][0] < intervals[i-1][1]:
count += 1
intervals[i][1] = min(intervals[i-1][1],intervals[i][1])
return count
第三题
![](https://img-blog.csdnimg.cn/direct/f427b2f5a42d45d0a68faa63b4818e72.png)
构建哈希表,记录每个字母最大位置缩影,重新遍历,不断更新最大位置索引
python
class Solution(object):
def partitionLabels(self, s):
"""
:type s: str
:rtype: List[int]
"""
hashmap = {}
result = []
for i in range(len(s)):
hashmap[s[i]] = i
left,right = 0, 0
for i in range(len(s)):
right = max(hashmap[s[i]],right) #不断更新最大位置索引,直到i==最大位置索引
if right == i:
result.append(right-left+1)#返回长度
left = i + 1
return result