其他分享
首页 > 其他分享> > 【leetcode1696】跳跃游戏

【leetcode1696】跳跃游戏

作者:互联网

https://leetcode-cn.com/problems/jump-game-vi/submissions/

分析

dp[i]表示跳跃到第i位时的最大得分,则转移方程为 dp[i]= (从dp[i-k]到dp[i-1]的最大值) +nums[i],采取单调队列维护区间最大值。

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

标签:游戏,nums,int,最大值,ln,100010,跳跃,leetcode1696,dp
来源: https://www.cnblogs.com/tsyxxxka/p/15312495.html