Leetcode_45. 跳跃游戏 II

每个位置i有一个最大跳跃距离,求最小步数从0跳到n-1。

dp[i]表示从0跳到i的最少步数,显然可以转移的状态就是从i-a[i]到i-1。

因为是最小步数,考虑用优先队列优化,再考虑到状态有范围的,所以用单调队列,及时将失效的dp状态移除。

code

class Solution { public: int jump(vector<int>& nums) { int n=nums.size(); vector<int> q(n,0); vector<int> dp(n,0); int l=0,r=-1; dp[0]=0; q[++r]=0; for(int i=1;i<n;i++){ while(l<=r && q[l]+nums[q[l]]<i){ l++; } dp[i]=dp[q[l]]+1; while(l<=r && dp[q[l]]>dp[i]){ r--; } q[++r]=i; } return dp[n-1]; } };

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjfsx.html