1,分饼干
先对两个数组进行排序,sort,从小到大排序,从孩子后面开始遍历,先用大饼干尽量满足大胃口,count++;
2,摆动序列
删除一些节点,可以简单画一下,删除的是单调递增或者递减上的除了两端的点。
连续判断三个,如果中间减去前一个与后一个减去中间的正负性不一致的话,就需要记录下来。
需要考虑三种情况,第一个
上下坡中有平坡,【1,2,2,2,1】,就有pre<=0,cur>0的情况。
数组首位两端,假设刚开始左边还有一个0;
单调坡度有平的;只在摆动有变化的时候更新pre;细节很多。
3,最大子数组和
经过尝试,用暴力算法的话,超出时间限制。
贪心:当前面的和是负数的时候,就说明到目前为止的和对后面的数字来说都是负担,因此,应当从下一个开始重新计数,将sum重新置零。注意用sum对result赋值和判断是否<0的顺序,应当先赋值,这样可以避免都为负数的情况下,造成最终结果不对。
4,买卖股票的最佳时机ii
从局部大值算全局最大的值,如果后一天比前一天的数字大的话,就用sum加上这个差,通过三个示例可以得出这样的算法是正确的。
引用代码随想录的解释:
5,跳跃游戏
可以跳几步并不重要,在于可以跳到的覆盖范围。
贪心:每次取最大的跳跃范围,看看最终能否包括终点。注意在for循环比较的时候,不能直接写数组的长度,因为有可能从前面的到不了后面的位置,因此i<=count,count要随时更新到最远的距离,也就是如果i+nums[i]>count的话,将值赋给count。