[D1,2] 贪心刷题
文章目录
- 摆动序列
- 最大子数组合
- 买卖股票
- 跳跃游戏
- 跳跃2
摆动序列
不像是贪心,只要抓住摆动这个点,前一个上升,那下一个就要下降,记录上一次的状态为1的话,那下一次就要更新为-1,如果上一次为1,这次还为1那就说明不是摆动的
最大子数组合
一层循环,如果当前和<=0,那么就将当前值置为0,如果当前和>已经保存的res,那么更新res
买卖股票
可以多次买入卖出
等价公式:3-1 = 3-2+2-1 因此可以直接计算每天的差值,相加就行
跳跃游戏
重点在于
- 当前位置i+当前位置可以跳到的最大位置就是判断的依据
cover = max(i+nums[i], cover);
- 当前位置i取多少就是循环的结束条件
for(int i=0; i<=cover; i++)
跳跃2
要想明白两个点
一个是 if(i==cur) 和 cur=next;这两句就隐含了跳跃不会超出覆盖范围
一个是如果不按 for(int i=0; i<nums.size(); i++)这个循环来,若使用 i <= cover 作为循环条件,可能会提前终止遍历,从而无法获取完整的信息。例如,后续的某个位置可能只需一次跳跃就能跳到更远的地方,进而减少总的跳跃次数,但由于提前终止遍历,这个信息就会被遗漏。
for(int i=0; i<nums.size(); i++){next = max(next, i+nums[i]);if(i==cur){res++;if(next>=nums.size()-1) break;cur=next;}
}