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]
}
相关推荐
2601_967979126 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔6 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆7 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
老师我太想进步了20267 小时前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
Hello_Pyhx7 小时前
Pavise v3.3.0.8 配置指南:从游戏识别到会话恢复
游戏
希望我万事顺遂8 小时前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode
꧁细听勿语情꧂8 小时前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫9 小时前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode
专注仿真18 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
罗西的思考19 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习