LeetCode每日一题 | 1696. 跳跃游戏 VI

文章目录

题目描述

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。

一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i + 1, min(n - 1, i + k)] 包含 两个端点的任意位置。

你的目标是到达数组最后一个位置(下标为 n - 1 ),你的 得分 为经过的所有数字之和。

请你返回你能得到的 最大得分 。

问题分析

状态表示:dp[i]表示到达位置 i 的最大得分

初始状态:dp[0] = nums[0]

状态计算:dp[i] = max{dp[j]},其中max(0,i−k) <= j < i

其中前 k 步的最大值,可以用一个双端队列进行维护。

程序代码

go 复制代码
func maxResult(nums []int, k int) int {
    n := len(nums)
    dp := make([]int, n)
    dp[0] = nums[0]
    // 双端队列
    q := make([]int, n)
    qi, qj := 0, 1
    for i := 1; i < n; i++ {
        // 容量超了
        for qi < qj && q[qi] < i - k {
            qi++
        }
        dp[i] = dp[q[qi]] + nums[i]
        // 比你年轻,能力还比你强
        for qi < qj && dp[q[qj - 1]] <= dp[i] {
            qj--
        }
        q[qj] = i
        qj++
    }
    return dp[n-1]
}
相关推荐
papership8 分钟前
【入门级-算法-5、数值处理算法:高精度整数除以单精度整数的商和余数】
算法
萌萌的提莫队长19 分钟前
Unity试玩广告-PlayWork-麻将消消乐游戏
游戏
CoderYanger27 分钟前
C.滑动窗口-求子数组个数-越短越合法——3258. 统计满足 K 约束的子字符串数量 I
java·开发语言·算法·leetcode·1024程序员节
2301_8079973833 分钟前
代码随想录-day56
算法
AI科技星41 分钟前
时空运动的几何约束:张祥前统一场论中圆柱螺旋运动光速不变性的严格数学证明与物理诠释
服务器·数据结构·人工智能·python·科技·算法·生活
春卷同学44 分钟前
基于Electron开发的跨平台鸿蒙PC找不同游戏应用
javascript·游戏·electron
杰克尼1 小时前
蓝桥云课-13. 定时任务
java·开发语言·算法
Minecraft红客1 小时前
HTMLminecraft版本
游戏·3d·html·娱乐
一个不知名程序员www1 小时前
算法学习入门---list与算法竞赛中的链表题(C++)
c++·算法
CoderYanger1 小时前
动态规划算法-路径问题:9.最小路径和
开发语言·算法·leetcode·动态规划·1024程序员节