860.柠檬水找零
解题思路:有5块的都收入,
有10块的,如何没有5块找零就返回false
有20的,先看有没有一张10块和一张5快,没有再看有没有三张5快,都没有返回false
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
five = 0
ten = 0
twenty = 0
for money in bills:
if money == 5:
five += 1
elif money == 10:
if five <= 0: return False
five -= 1
ten += 1
else:
if ten > 0 and five > 0:
five -= 1
ten -= 1
twenty += 1
elif ten <= 0 and five >=3:
five -= 3
twenty += 1
else:
return False
return True
406.根据身高重建队列
解题思路:(贪心)解决一个身高维度,再解决k这个维度
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
# 根据heigh从大到小排序
people.sort(key = lambda x:(-x[0],x[1]))
res = []
#根据K排序
for item in people:
res.insert(item[1],item)
return res
452. 用最少数量的箭引爆气球
解题思路:(贪心)重叠问题
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
if len(points) == 0:return 0
points.sort(key = lambda x:x[0])
res = 1
for i in range(len(points)):
if points[i-1][1] < points[i][0]:
res += 1
else:
points[i][1] = min(points[i][1],points[i-1][1])
return res