452.用最少数量的箭引爆气球
这道题感觉还是和顾住一头有一点类似,虽然题目归类为重叠区间。看
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
points.sort(key=lambda x:x[0])
#按照起始位置升序排列
cnt=1;tmp=points[0][1]
for i in range(1,len(points)):
if tmp >= points[i][0]:
tmp=min(tmp,points[i][1]) #如果第二个球能爆,将判断值更新,接着看能不能接着爆
else: #如果不能爆
tmp=points[i][1]
cnt+=1
return cnt
435.无重叠区间
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
intervals.sort(key=lambda x:x[0])
cnt=0
tmp=intervals[0][1]
for i in range(1,len(intervals)):
"""
三种情况:第一种,前后值相等
第二种:在两数中间
"""
if tmp>intervals[i][0]:
tmp=min(tmp,intervals[i][1])
cnt+=1
else:
tmp=intervals[i][1]
return cnt
763.划分字母区间
class Solution:
def partitionLabels(self, s: str) -> List[int]:
"""
1.找到字母出现的最远下标
2.遍历整个数组,更新最远下标
"""
max_distance_index={}
for key,value in enumerate(s):
max_distance_index[value]=key #最远下标统计
res=[];start=0;end=0
for key,value in enumerate(s):
end=max(end,max_distance_index[value])
if key==end:
res.append(end-start+1)
start=key+1
return res