这道题使用了构建了字典去查询的
python
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
yours = {"5":0,"10":0,"20":0}
for i in range(len(bills)):
if bills[i] == 5:
yours["5"] += 1
elif bills[i] == 10:
if yours["5"] != 0:
yours["5"] -= 1
yours["10"] += 1
else:
return False
else:
if yours["5"] != 0 and yours["10"] != 0:
yours["20"] += 1
yours["5"] -= 1
yours["10"] -= 1
elif yours["5"] >= 3:
yours["5"] -= 3
yours["20"] += 1
else:
return False
print(yours)
return True
python
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
感觉这道题十分简单,但是有想不到,贪心有时就是这样
可能是因为贪心不能有一个固定的公式,所以总觉得做的很吃力,完全没有头绪,没有一个可以套的公式。
python
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
points.sort(key = lambda x:(x[0],x[1]))
i = 1
result = 1
for i in range(1, len(points)):
if points[i][0] > points[i - 1][1]:
result += 1
else:
points[i][1] = min(points[i - 1][1], points[i][1]) # 更新重叠气球最小右边界
return result