贪心算法-跳跃游戏II

45.跳跃游戏II

java 复制代码
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。

每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

0 <= j <= nums[i] 
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

输入 :数组
输出 :整型
思路

  1. 从右往左,先让position等于最右边,然后遍历数组,找到最小能到达的下标,然后更新position,直到position==0
java 复制代码
class Solution {
    public int jump(int[] nums) {
        int position = nums.length - 1;
        int step = 0;
        while(position != 0){
            for(int i = 0; i < position; i++){
                if(i + nums[i] >= position){
                    position = i;
                    step++;
                    break;
                    }
                }
            }
            return step;
        }
    }
}

方法一虽然可以实现,但是时间复杂度高O(n2)

  1. 使用正向遍历,记录可以到达的最远位置
java 复制代码
class Solution {
    public int jump(int[] nums) {
        int len = nums.length;
        int end = 0;
        int maxPosition = 0;
        int step = 0;
        for(int i = 0; i < len - 1; i++){
            maxPosition = Math.max(maxPosition, i + nums[i]);
            if(i == end){
                end = maxPosition;
                step++;
            }
        }
        return step;
    }
}

注意两点

  • 对于if(end == i)的理解
  • 对于不需要遍历到最后一个元素的理解
相关推荐
AI科技星7 分钟前
算法联盟·全域数学公理体系下黑洞标量毛发与LVK引力波O4全维理论、求导、证明、计算、验证、分析
人工智能·线性代数·算法·架构·学习方法·量子计算
谙弆悕博士7 分钟前
【附C语言源码】C语言 栈结构 实现及其扩展操作
c语言·开发语言·数据结构·算法·链表·指针·
YuanDaima20488 分钟前
图论基础原理与题目说明
数据结构·人工智能·python·算法·图论·手撕代码
AI人工智能+电脑小能手9 分钟前
【大白话说Java面试题 第53题】【JVM篇】第13题:JVM采用什么算法判断一个对象是否需要被回收?
java·jvm·算法·面试
小赵不会秃头13 分钟前
数据结构Day 06:线性结构、库操作及 Makefile 完整学习笔记
java·linux·数据结构·算法·面试
Shan120523 分钟前
在C++中尝试封装为函数
开发语言·c++·算法
郝学胜-神的一滴34 分钟前
干货版《算法导论》04:渐近复杂度与序列接口实战
java·开发语言·数据结构·c++·python·算法
zzzsde35 分钟前
【Linux】信号处理(3)信号处理&&valatile关键字
linux·运维·服务器·开发语言·算法
小夏子_riotous37 分钟前
Kubernetes学习路径——5. Kubernetes 实战入门:Namespace、Pod、Label、Deployment 与 Service 全解析
学习·贪心算法·kubernetes
洛水水1 小时前
【力扣100题】47.最长递增子序列
算法·leetcode·职场和发展