题目:柠檬水找零
题解:
1)一共就三种情况。贪心体现在,当收到20元钱的时候优先使用10元来找零。如果没有10再用3张5来找零,因为5更万能。
代码:
class Solution(object):
def lemonadeChange(self, bills):
"""
:type bills: List[int]
:rtype: bool
"""
five = 0
ten = 0
twenty = 0
for b in bills:
if b == 5:
five+=1
elif b == 10:
if five > 0:
ten+=1
five -=1
else:
return False
else:#贪心体现在这里
twenty+=1
if ten>0 and five >0:
ten-=1
five -=1
elif five>=3:
five -=3
else:
return False
return True
题目:根据身高重建队列
题解:
1)两个维度的问题一定要先选择一个维度进行排序。先按照身高从高往低排列,如果身高一致的,那么按照第二维升序进行排列。
2)然后将排列好的数组进行重新插空。这次直接按照第二维向结果数组里插即可。
代码:
class Solution(object):
def reconstructQueue(self, people):
"""
:type people: List[List[int]]
:rtype: List[List[int]]
"""
people.sort(key = lambda x : (x[0],-x[1]), reverse = True)
print(people)
res = []
tmp = 0
for p in people:
if len(res) == p[1]:
res.append(p)
else:
res.insert(p[1], p)
return res
题目:用最少数量的剑射爆气球
题解:
1)按照左边界从小到大排序。如果发现有新的不重叠的气球,那么就将结果加一
代码:
points.sort(key = lambda x:x[1])
# print(points)
res = 1 #至少需要一支箭
p = 0
if len(points) == 1:
return 1
if not points:
return None
temp = points[0][1]
for p in points:
if p[0] > temp:
res+=1
temp = p[1]
return res