贪心算法:
贪心算法核心理念是用局部最优解来算出全局最优解。
贪心算法没有模板套路,只能通过不同题目进行不同的贪心模拟。
贪心题目难度很容易两极分化,有时候会是常识性题,甚至没意识到是贪心算法。
饼干分发:
有n个小孩和n个饼干,每个饼干有最大满足胃口,每个小孩有胃口容量,求出这n个饼干能满足多少个小孩。
思路:用最小的饼干尽量去满足胃口最小的小孩(也可以用最大的饼干尽量去满足胃口最大的小孩,但数组要求最后一个元素向前遍历):
注意:for循环中的i下标一定要用于饼干数组,不然当饼干为{1,3},孩子为{2}时满足数量会输出0。
摆动序列:
在一个数组中删除元素,算出此数组中的最长摆动序列。
摆动序列相邻前后两序列之差呈现正负交替变化。
2个不同的元素组成的序列也是摆动序列。
定义i为数组下标,p用于记录前一个摆动,q用于计算后一个摆动。
初始化最长长度为一是因为默认最后一个为一个摆动。
下标i从第一个元素开始,从倒数第二个元素结束(因为已经记录了最后一个序列长度)
每次先更新q的摆动大小
接着和上一个摆动p进行比较(由正变负或由负变正)
满足条件的则cnt++,并更新p=q。
注意:如果将p=q放在if条件外,则会在相邻两个元素之间比较而不是相邻两个摆动,这时代码会多计算当单调摆动中存在平动序列的长度。