代码随想录刷题第34天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

860.柠檬水找零

有如下三种情况:

  • 情况一:账单是5,直接收下。
  • 情况二:账单是10,消耗一个5,增加一个10
  • 情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5
class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        five=0
        ten=0
        twenty=0#一开始都是没钱的

        for bill in bills:
            if bill==5:
                five+=1
            
            if bill==10:
                if five<=0:
                    return False
                ten+=1
                five-=1
            if bill ==20:
                #先使用10美元和5美元找零
                if five>0 and ten>0:
                    five-=1
                    ten-=1
                    twenty+=1#可省略,因为没办法用20找零
                elif five>=3:
                    five-=3
                else:
                    return False
        return True


406.根据身高重建队列

我们可以确定一个维度了,就是身高,前面的节点一定都比本节点高

排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]

插入的过程:

  • 插入[7,0]:[[7,0]]
  • 插入[7,1]:[[7,0],[7,1]]
  • 插入[6,1]:[[7,0],[6,1],[7,1]]
  • 插入[5,0]:[[5,0],[7,0],[6,1],[7,1]]
  • 插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]]
  • 插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
class Solution:
    def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
        #按照h维度的身高顺序从高到低排序,确定第一个维度
        # lambda返回的是一个元组:当-x[0](维度h)相同时,再根据x[1](维度k)从小到大排
        people.sort(key=lambda x:(-x[0],x[1]))
        que=[]

        #people已经排序过:同一高度时k值小的排前面
        for p in people:
            que.insert(p[1],p)#这行代码的意思是将数组p中索引为1的元素插入到队列que中。
        
        return que

452. 用最少数量的箭引爆气球

为了让气球尽可能的重叠,需要对数组按照起始位置进行排序

如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭。

class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        if len(points)==0:
            return 0
        points.sort(key=lambda x: x[0])#以x[0为基础进行排序
        result=1
        for i in range(1,len(points)):
            if points[i][0]>points[i-1][1]:# 气球i和气球i-1不挨着,注意这里不是>=
                result+=1
            else:
                points[i][1]=min(points[i][1],points[i-1][1])
        return result
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        
        points.sort(key=lambda x: x[0])#以x[0为基础进行排序
        sl,sr=points[0][0],points[0][1]
        count=1
        for i in points:
            if i[0]>sr:
                count+=1
                sl,sr=i[0],i[1]
            else:
                s1=max(sl,i[0])
                sr=min(sr,i[1])
        return count

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值