问题
https://leetcode.com/problems/jump-game-ii/
解法
贪心法, 首先使用一个堆栈记录跳转路径,从后往前走(参考上一篇), 不断加入新节点,如果新节点可以跳过栈顶节点而到达栈的其他节点,则删除之间的节点。这样得到的路径总是比之前的路径短。
class Solution {
public:
int jump(vector<int>& nums) {
if (nums.size() ==0)
return 0;
if (nums.size() ==1)
return 0;
int ss[nums.size()];
int sp = -1;
ss[++sp] = nums.size()-1;
for (int i=nums.size()-2; i>=0; --i)
{
int now = i+nums[i];
if (now >= ss[sp])
{
while(sp>0 && now>= ss[sp-1]) --sp;
ss[++sp] = i;
}
}
return sp;
}
};