本文主要是介绍代码随想录算法训练营第三十七天 | 860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
860.柠檬水找零
思路
代码
406.根据身高重建队列
思路
代码
452. 用最少数量的箭引爆气球
思路
代码
860.柠檬水找零
本题看上好像挺难,其实挺简单的,大家先尝试自己做一做。代码随想录
思路
这题还有什么难不难的,这道题不是非常经典的入门题吗。能用10块找零就不用5块,10块没了再用5块,就这么简单。
代码
class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five = 0ten = 0twenty = 0for bill in bills:# 情况一:收到5美元if bill == 5:five += 1# 情况二:收到10美元if bill == 10:if five <= 0:return Falseten += 1five -= 1# 情况三:收到20美元if bill == 20:# 先尝试使用10美元和5美元找零if five > 0 and ten > 0:five -= 1ten -= 1#twenty += 1# 如果无法使用10美元找零,则尝试使用三张5美元找零elif five >= 3:five -= 3#twenty += 1else:return Falsereturn True
406.根据身高重建队列
本题有点难度,和分发糖果类似,不要两头兼顾,处理好一边再处理另一边。代码随想录
思路
这题我写过, 只是我已经忘记怎么写了(每日崩溃1/1)。大体上来说,就是先按照身高排序,最高的在最前面,一样高的比较数组中的第二位,第二位小的排前面。这样的好处就是我后面从前向后遍历每一个人时,我可以根据数组的第二位直接insert到que[ ]对应的位置。
代码
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 = []# 根据每个元素的第二个维度k,贪心算法,进行插入# people已经排序过了:同一高度时k值小的排前面。for p in people:que.insert(p[1], p)return que
452. 用最少数量的箭引爆气球
本题是一道 重叠区间的题目,好好做一做,因为明天三道题目,都是 重叠区间。
代码随想录
思路
这道题属于重叠区间的问题,一样需要先对给定的数组按这左端点或者右端点进行排序,然后遍历数组,看看这个区间的左端点是否小于等于上个区间放入右端点,如果重叠就不需要额外多用一支箭,但要注意更新右端点要用right = min(right, i[1]),如果不重叠就需要多用一支箭同时更新右端点的值。更新右端点用right=i[1]来更新。
代码
class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if len(points) == 0:return 0points.sort(key=lambda x: x[0])count = 1right = points[0][1]for i in points:if i[0] > right:count += 1right = i[1]else:right = min(right, i[1])return count
这篇关于代码随想录算法训练营第三十七天 | 860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!