LEETCODE-DAY35


title: LEETCODE-DAY35

date: 2024-03-26 16:11:08
tags:

今日内容:860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

T1

python 复制代码
class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        table={5:0,10:0,20:0}
        for i in range(len(bills)):
            if bills[i]==5:
                table[5]+=1
            elif bills[i]==10:
                if table[5]<=0:
                    return False
                else:
                    table[10]+=1
                    table[5]-=1
            elif bills[i]==20:
                if table[5]<=0 or table[10]<=0:
                    return False 
                else: 
                    table[20]+=1
                    table[10]-=1
                    table[5]-=1
        return True

输入

bills =

5,5,10,20,5,5,5,5,5,5,5,5,5,10,5,5,20,5,20,5

输出

false

预期结果

true

python 复制代码
class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        table={5:0,10:0,20:0}
        for i in range(len(bills)):
            if bills[i]==5:
                table[5]+=1
            elif bills[i]==10:
                if table[5]<=0:
                    return False
                else:
                    table[10]+=1
                    table[5]-=1
            elif bills[i]==20:
                if (5*table[5]+10*table[10]<15) or table[5]<=0:
                    return False 
                else: 
                    table[20]+=1
                    table[10]-=1
                    table[5]-=1
        return True
        

AC

T2

本题主要难点在于如何将数组按照h从大到小,h相同时k从小到大的方式进行排序

python 复制代码
class Solution:
    def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
        people.sort(key=lambda x:(-x[0], x[1]))
        queue=list()
        for i in range(len(people)):
            queue.insert(people[i][1],people[i])
        return queue

T3

python 复制代码
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        points.sort()
        l=len(points)
        for i in range(l):
            if i>0 and points[i][0]<points[i-1][1]:
                points[i][1]=points[i-1][1]
                points.pop(i-1)

        return len(points)

IndexError: list index out of range

~~~~~~^^^

if i>0 and points[i][0]<points[i-1][1]:

队列长度减小了

python 复制代码
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        points.sort()
        l=len(points)
        for i in range(l):
            if i>0 and i<len(points) and points[i][0]<points[i-1][1]:
                points[i][1]=points[i-1][1]
                points.pop(i-1)

        return len(points)

输入

points =

\[1,2\],\[2,3\],\[3,4\],\[4,5\]

输出

4

预期结果

2

python 复制代码
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        points.sort()
        l=len(points)
        for i in range(l):
            if i>0 and i<len(points) and points[i][0]<=points[i-1][1]:
                points[i][1]=points[i-1][1]
                points.pop(i-1)

        return len(points)

points =

\[3,9\],\[7,12\],\[3,8\],\[6,8\],\[9,10\],\[2,9\],\[0,9\],\[3,9\],\[0,6\],\[2,8\]

输出

5

预期结果

2

问题在于points pop之后指标也会产生变化,所以需要定义一个变量来记录重叠次数

思路:没有重叠时需射l箭,每有一个重叠少射一箭

python 复制代码
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        points.sort()
        l=len(points)
        j=0
        for i in range(l):
            if i>0 and points[i][0]<=points[i-1][1]:
                points[i][1]=min(points[i-1][1],points[i][1])
                j+=1

        return l-j

AC

python 复制代码
相关推荐
DASXSDW20 小时前
NET性能优化-使用RecyclableBuffer取代RecyclableMemoryStream
java·算法·性能优化
kfepiza20 小时前
CAS (Compare and Swap) 笔记251007
java·算法
墨染点香21 小时前
LeetCode 刷题【103. 二叉树的锯齿形层序遍历、104. 二叉树的最大深度、105. 从前序与中序遍历序列构造二叉树】
算法·leetcode·职场和发展
啊我不会诶21 小时前
23ICPC澳门站补题
算法·深度优先·图论
Brookty1 天前
【算法】二分查找(一)朴素二分
java·学习·算法·leetcode·二分查找
黑色的山岗在沉睡1 天前
LeetCode 2761. 和等于目标值的质数对
算法·leetcode·职场和发展
bawangtianzun1 天前
重链剖分 学习记录
数据结构·c++·学习·算法
T1an-11 天前
力扣70.爬楼梯
算法·leetcode·职场和发展
T1an-11 天前
力扣169.多数元素
数据结构·算法·leetcode
_dindong1 天前
动规:回文串问题
笔记·学习·算法·leetcode·动态规划·力扣