Day35 贪心算法4
860.柠檬水找零
思路
定义列表,存储拥有的5元、10元钞票的个数
局部最优:每次新的顾客给的钱需要找零,从已有的零钱数中减去,优先找零10元的,如果没有,则返回False
尝试写代码:
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
change = [0, 0]
for i in range(len(bills)):
if bills[i] == 5:
change[0] += 1
elif bills[i] == 10:
change[1] += 1
change[0] -= 1
else:
if change[1]:
change[1] -= 1
change[0] -= 1
else:
change[0] -= 3
if change[0] < 0 or change[1] < 0:
return False
return True
代码随想录答案:
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
five = 0
ten = 0
twenty = 0
for bill in bills:
# 情况一:收到5美元
if bill == 5:
five += 1
# 情况二:收到10美元
if bill == 10:
if five <= 0:
return False
ten += 1
five -= 1
# 情况三:收到20美元
if bill == 20:
# 先尝试使用10美元和5美元找零
if five > 0 and ten > 0:
five -= 1
ten -= 1
#twenty += 1
# 如果无法使用10美元找零,则尝试使用三张5美元找零
elif five >= 3:
five -= 3
#twenty += 1
else:
return False
return True
这里是每次找零钱都判断是否有零钱,没有直接返回false
406.根据身高重建队列
452. 用最少数量的箭引爆气球
tbd