455. 分发饼干:
思想:
局部最优,把最大的饼干给胃口最大的孩子,因为目的是满足最多的孩子,最大的饼干可以满足胃口大的孩子,也可以满足胃口小的孩子,但是小的饼干只能满足胃口小的孩子
代码:
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
index = len(s)-1
result = 0
for i in range(len(g)-1,-1,-1):#range(len(g)-1, -1, -1) 中的 -1:是 range 函数的参数,用于定义序列的结束值和步长。
列表索引中的 -1:用于访问列表的最后一个元素。
if index>= 0 and s[index] >=g[i]:
result+=1
index-=1
return result
遇到的问题:
1.对于先遍历谁的问题,只能是饼干去匹配小孩的胃口,
376. 摆动序列:
思想:
局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。
整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。
代码:
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
result = 1#默认为1,是因为如果数组的长度大于2,不会计算最后末尾的,但是末尾的一定符合条件
if len(nums)<=1:
return len(nums)
prediff = 0
curdiff = 0
for i in range(len(nums)-1):
curdiff = nums[i+1]-nums[i]
if (prediff<=0 and curdiff>0) or (prediff>=0 and curdiff <0):#第一种情况是高峰,第二种情况是低谷
result+=1
prediff=curdiff
return result
遇到的问题:
1.对于特殊情况的理解,对于只有两个元素的情况,为了符合大于两个元素的判断情况,让result默认为1,
53. 最大子数组和:
思想:
贪心贪的是当数组的和为负数时就重新开始记录连续的子数组,不用担心之前记录的最大子数组和会丢失,因为已经提前记录了
代码:
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
result = float('-inf')
count =0
for i in range(len(nums)):
count+=nums[i]
if result<count:
result = count
if count<=0:
count = 0
return result
遇到的问题:
1.对于第二个将count重置为0时,会影响result:但是观察发现在判断result和count的关系前,count就已经加上了数组内的数,所以不用担心数组内全是负数的情况
709

被折叠的 条评论
为什么被折叠?



