860. 柠檬水找零
模拟的思路
def lemonadeChange(self, bills: List[int]) -> bool:
num_five = 0
num_ten = 0
for i,b in enumerate(bills):
if b == 5:
num_five += 1
else:
# give change
if b == 10:
num_ten += 1
if num_five == 0:
return False
num_five -= 1
if b == 20:
if num_ten > 0:
num_ten -= 1
else:
if num_five < 3:
return False
num_five -= 2
if num_five == 0:
return False
num_five -= 1
return True
406. 根据身高重建队列
先预排序列,在身高从大到小的前提下,可以直接利用第二个值作为插入的下标,因为前面的身高一定大于等于自身
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
# 0位置升序 1位置升序
# 身高从大到小排 基础上 下标从小到大排
pp = sorted(people, key=lambda x: (-x[0],x[1]))
res = []
for p in pp:
if res == []:
res.append(p)
else:
res.insert(p[1], p)
return res
452. 用最少数量的箭引爆气球
注意边界条件
通过更改范围内的值n[-1]=i[1],便于后续判断,这一步是关键
def findMinArrowShots(self, points: List[List[int]]) -> int:
n = []
# 求最少的能同时在数组范围内的
points.sort()
for i in points:
if n == []:
n.append(i[1])
else:
if i[0] <= n[-1] <= i[1]:
continue
elif n[-1] > i[1]:
n[-1] = i[1]
else:
n.append(i[1])
return len(n)