刷题记录
以局部最优推出整体最优,且想不到反例,则可以尝试贪心算法
从后向前遍历孩子数组,用大饼干满足胃口大,并统计满足小孩数量
class Solution(object):
def findContentChildren(self, g, s):
g.sort()
s.sort()
res=0
ind=len(s)-1
for i in range(len(g)-1,-1,-1):
if ind>=0 and s[ind]>=g[i]:
res+=1
ind-=1
return res
class Solution(object):
def wiggleMaxLength(self, nums):
pre,cur=0,0
res=1
for i in range(len(nums)-1):
cur=nums[i+1]-nums[i]
if (cur>0 and pre<=0) or (cur<0 and pre>=0):
res+=1
pre=cur
return res
遍历nums,从头开始用count累积,如果count一旦加上nums[i]变为负数,那么就应该从nums[i+1]开始从0累积count了,因为已经变为负数的count,只会拖累总和。
class Solution(object):
def maxSubArray(self, nums):
res=float('-inf')
count=0
for i in range(len(nums)):
count+=nums[i]
if count>res:res=count
if count<=0:count=0
return res
收集正利润
class Solution(object):
def maxProfit(self, prices):
res=0
for i in range(1,len(prices)):
res+=max(prices[i]-prices[i-1],0)
return res
i每次移动只能在cover的范围内移动,每移动一个元素,cover得到该元素数值(新的覆盖范围)的补充,让i继续移动下去。
而cover每次只取 max(该元素数值补充后的范围, cover本身范围)。
如果cover大于等于了终点下标,直接return true就可以了。
class Solution(object):
def canJump(self, nums):
cover=0
i=0
while i<=cover:
cover=max(i+nums[i],cover)
if cover>=len(nums)-1:return True
i+=1
return False