笔记:代码随想录
概述
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
(1)靠自己手动模拟,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。
(2)最好用的策略就是举反例,如果想不到反例,那么就试一试贪心吧。
鸡肋的四个步骤
贪心算法一般分为如下四步:
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
力扣
1.分发饼干
这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。
2.摆动序列(上嘴脸)
贪心:将不是峰值的地方给贪掉了。
3.最大子序和
如果 -2 1 在一起,计算起点的时候,一定是从1开始计算,因为负数只会拉低总和,这就是贪心贪的地方!
4.买卖股票的最佳时机二
假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。将求利润的问题转换为求今天相对于昨天利润的差的相加。求最大利润当然是将正利润相加。
5.跳跃游戏
将问题转换为范围覆盖问题。
6.跳跃游戏二
7.k次取反后最大化的数组和
8.加油站
for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历,要善于使用while。将两个数组做结合的思路。
9.分发糖果
确定一边再确定另一边。
10.柠檬水找零
11.根据身高重建队列。
和9类比一下,遇到两个维度权衡时,先确定一个维度,再确定另一个维度。
12.用最少数量的箭引爆气球
13.无重叠区间
14.划分字母区间
15.合并区间
16.单调递增的数字
17.监控二叉树