Leetcode 045. 跳跃游戏 II 贪心

地址 https://leetcode-cn.com/problems/jump-game-ii/

复制代码
给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
复制代码

解答

由于题目要求是可以跳跃的最大长度而不是必须要跳的长度

那么 num[i]+i 是能达到的最远元素索引 那么他就可以包含其他选择所能达到的位置 

所以我们使用贪心策略  每次选择 nums[i]+i 能达到最远的索引即可

道理很清晰 但是代码考虑到边界问题后 组织起来还是有一番难度的

复制代码
class Solution {
public:
    
    int jump(vector<int>& nums) {
    if (nums.size() == 1) return 0;
    int maxpos = 0;
    int step = 1;
    while (maxpos < nums.size() - 1) {
        if (nums[maxpos] + maxpos >= nums.size() - 1) 
            return step;
        int maxr = -1; int maxidx = -1;
        for (int i = 1; i <= nums[maxpos]; i++) {
            int idx = maxpos + i;

            if (maxr < nums[idx] + idx) {
                maxr = nums[idx] + idx;
                maxidx = idx;
            }
        }
        maxpos = maxidx;
        step++;
    }

    return step;
}
    
};
复制代码

 

posted on   itdef  阅读(140)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2017-05-04 缩水版遗传算法 学习笔记
2016-05-04 SNMP++ 编译记录

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示