代码随想录算法训练营第34天

0 阅读1分钟

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