今天还是没有没有找到贪心的感觉,总是能感觉到和什么相关,但是不能完全想到解决方法
860. Lemonade Change
这道题感觉就是一道纯逻辑题,只要想好了几个if就可以了
Way1:
如果是给了10则需要查看自己手里面是不是至少有一个5.如果给了20则需要查看是不是有一个10和一个5或者三个5.如果没有返回false
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
dic={5:0,10:0}
for b in bills:
if b==5:
dic[5]+=1
if b==10:
if dic[5]<1:
return False
dic[5]-=1
dic[10]+=1
if b==20:
if dic[10]>=1 and dic[5]>=1:
dic[10]-=1
dic[5]-=1
elif dic[5]>=3:
dic[5]-=3
else:
return False
return True
406. Queue Reconstruction by Height
这道题的关键要考虑如果进行排序.[0,1]里面第一位存的是身高第二位存的是有多少个人比当前人高所以可以先选其中一个排试试
Way1:
先按照身高从高往低排,然后进行数据插入根据有多少个人大于等于当前身高
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
people.sort(key=lambda x: (-x[0],x[1]))
q=[]
for p in people:
q.insert(p[1],p)
return q
452. Minimum Number of Arrows to Burst Balloons
看到题的第一反应一定是先sort一下然后进行合并.合并的方法就是i的1和i-1的0位的对比
Way1:
如果i的0比i-1的1大,则需要新的箭,否则i的1取当前值和i-1的1之中的最小值
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
points.sort(key=lambda x: (x[0],x[1]))
res=1
for i in range(1,len(points)):
if points[i][0]>points[i-1][1]:
res+=1
else:
points[i][1]=min(points[i][1],points[i-1][1])
return res