学习安排根据《代码随想录》
贪心基础理论知识:
贪心的思想:局部选优===》全局最优
贪心的套路:先用贪心模拟+是否能举出反例===》如果没有反例===》用贪心
【ps:也可以说没有套路~就是莽】
练习:
leetcode 55 跳跃游戏 【略】
leetcode 45 跳跃游戏 二
模拟:
当前位置可到达的所有区域,在该区域内,每走一步,看是否下一次的覆盖区域能涵盖终点
,一旦涵盖,走到当前位置的步数+1就是最小步数。
代码:
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size()==1)return 0;
int curDis=0;//当前最远距离下标
int nextDis=0;//下一步最远距离下标
int ans=0;
for(int i=0;i<nums.size();i++)
{
nextDis=max(nums[i]+i,nextDis);//每走一步都要更新最远距离,尽快找到达到终点的位置
if(i==curDis)//如果i已经到达了最远的覆盖位置
{
if(curDis!=nums.size()-1)
{
ans++;
curDis=nextDis;
if(nextDis>=nums.size()-1)//如果i没到达最远覆盖位置时的下一次覆盖包括了终点
//那到达了最远位置后,肯定也覆盖了终点,所以没有影响
break;
}
else break;//如果最远位置等于或者超过了终点
}
}
return ans;
}
};