代码随想录

455 分发饼干

思路:代码随想录

思路:贪心没有套路。每一题可能都不一样。所以本题,我们的局部最优就是拿大饼干去喂胃口大的小孩。最终推出全局最优。2个数组需要先排序。

  376 摆动序列

思路:代码随想录

思路:数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。

贪心思路:遇到摆动我们计数器++。

但本题要考虑三种情况:

  1. 情况一:上下坡中有平坡
  2. 情况二:数组首尾两端
  3. 情况三:单调坡中有平坡

情况 1:例如 [1,2,2,2,1]这样的数组 

当 i 指向第一个 2 的时候,prediff > 0 && curdiff = 0 ,当 i 指向最后一个 2 的时候 prediff = 0 && curdiff < 0

如果我们采用,删左面三个 2 的规则,那么 当 prediff = 0 && curdiff < 0 也要记录一个峰值,因为他是把之前相同的元素都删掉留下的峰值。

所以我们记录峰值的条件应该是: (preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0),为什么这里允许 prediff == 0 ,就是为了 上面我说的这种情况

情况2:这里我们可以写死,就是 如果只有两个元素,且元素不同,那么结果为 2。 

情况3:

应该什么时候更新 prediff 呢?

我们只需要在 这个坡度 摆动变化的时候,更新 prediff 就行,这样 prediff 在 单调区间有平坡的时候 就不会发生变化,造成我们的误判。

53.最大子数组和

思路:代码随想录

思路:

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。

全局最优:选取最大“连续和”

 

局部最优的情况下,并记录最大的“连续和”,可以推出全局最优

 如何放弃连续和呢,只要让连续和等于0 这样在下一个循环就可以重新被赋值。

我们要先判断连续和是不是大于result。以防万一数组里全是负数。这样不会被直接赋值为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值