一、刷題:
1.leetcode題目?860. 檸檬水找零 - 力扣(LeetCode)(easy):
我覺得我寫的代碼有點蠢
class Solution:def lemonadeChange(self, bills: List[int]) -> bool:dict_ = {5:0,10:0}if bills[0] != 5:return Falsefor i in bills:if i == 5 :dict_[i] += 1if i== 10:if dict_[5] ==0:return Falseif dict_[5] !=0:dict_[i] += 1dict_[5] -= 1if i == 20:if dict_[5] == 0:return Falseelif dict_[5]<3 and dict_[10]==0:return Falseelse:if dict_[10]>0:dict_[10] -=1 dict_[5] -=1else:dict_[5] -= 3return True
2.leetcode 題目?406. 根據身高重建隊列 - 力扣(LeetCode)(medium)
解決:
這題我沒想出來,好像套路就是貪心的題目有組合的順序的,先按照其中一個排序,再推出下一步。
class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(key = lambda x:(-x[0],x[1])) ###神奇的貪心算法que = []for p in people:que.insert(p[1],p)return que
3.leetcode題目?452. 用最少數量的箭引爆氣球 - 力扣(LeetCode)(medium)
解決:
注意更新箭挨得最近的爆破點
class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:points.sort(key = lambda x:(x[0],x[1]))ans = 1for i in range(1,len(points)):if points[i][0]>points[i-1][1]:ans +=1else:points[i][1] = min(points[i-1][1],points[i][1])return ans