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 复制代码
相关推荐
小六子成长记1 小时前
【C++】:搜索二叉树的模拟实现
数据结构·c++·算法
汉克老师1 小时前
GESP2025年9月认证C++二级真题与解析(编程题1(优美的数字))
c++·算法·整除·枚举算法·求余·拆数
Zevalin爱灰灰2 小时前
现代控制理论——第二章 系统状态空间表达式的解
线性代数·算法·现代控制
菜鸟233号2 小时前
力扣377 组合总和 Ⅳ java实现
java·数据结构·算法·leetcode
我是大咖2 小时前
二级指针与指针数组搭配
c语言·数据结构·算法
老鼠只爱大米2 小时前
LeetCode算法题详解 189:轮转数组
leetcode·轮转数组·数组旋转·环状替换法·算法面试题
葫三生3 小时前
三生原理范畴语法表明中国哲学可为算法母语
人工智能·深度学习·算法·transformer
D_FW3 小时前
数据结构第五章:树与二叉树
数据结构·算法
WHS-_-20223 小时前
Tx and Rx IQ Imbalance Compensation for JCAS in 5G NR
javascript·算法·5g
jinmo_C++3 小时前
Leetcode_59. 螺旋矩阵 II
算法·leetcode·矩阵