Jump Game II 跳跃游戏(求跳到最后一个的最小步数) @LeetCode

跳跃游戏 Jump Game 分析与整理 参考文章 点这儿查看 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以向后跳跃的最大长度。 问题一 判断你能不能到达数组的最后一个位置。 思路:从数组的第一个位置开始,往后一格一格遍历数组,当所遍历的位置还没超出可reach范围时,根据跳力更新可reach范围,可遍历的范围必须小于等于reach值。若可reach范围可覆盖数组最后一个位置,则可到达;... 阅读详情

第一次遇到用DP还超时的问题!既然DP都超时,那么只能再一次用greedy了。不过好歹想出了DP的solution

贪心的思想是用尽可能少得步子走完,一个重要思想是不断更新target位置,使得target不断向前移动

package Level4;

import java.util.Arrays;

/**
 * Jump Game II 
 * 
 *  Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Your goal is to reach the last index in the minimum number of jumps.

For example:
Given array A = [2,3,1,1,4]

The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)
 *
 */
public class S45 {

	public static void main(String[] args) {
		int[] A = {2,3,1,1,4};
		System.out.println(jump(A));
	}
	
	// 经典DP,但是TLE
	public static int jump(int[] A) {
        int[] jmp = new int[A.length];
        jmp[0] = 0;
        for(int i=1; i<A.length; i++){
        	jmp[i] = Integer.MAX_VALUE;
        	for(int j=0; j<i; j++){
        		if(i-j <= A[j]){
        			jmp[i] = Math.min(jmp[i], jmp[j]+1);
        		}
        	}
        }
//        System.out.println(Arrays.toString(jmp));
        return jmp[A.length-1];
    }

	// Greedy 在DP超时情况下,只能试着用greedy了!AC
	public static int jump2(int[] A) {

		int jmp = 0;
		int dest = A.length-1;		// destination index
		
		while(dest != 0){		// 不断向前移动dest
			for(int i=0; i<dest; i++){
				if(i+A[i] >= dest){		// 说明从i位置能1步到达dest的位置
					dest = i;		// 更新dest位置,下一步就是计算要几步能调到当前i的位置
					jmp++;
					break;		// 没必要再继续找,因为越早找到的i肯定越靠前,说明这一跳的距离越远
				}
			}
		}
		return jmp;
	}

}



public class Solution {
    public int jump(int[] A) {
        int target = A.length-1;
        int cnt = 0;
        while(target > 0) {
            for(int i=0; i<target; i++) {
                if(i+A[i] >= target) {
                    target = i;
                    cnt++;
                }
            }
        }
        return cnt;
    }
}



    public int jump(int[] A) {
        // write your code here
        
        int maxreach = 0;
        int cnt = 0;
        for(int i=0; i<A.length; i++) {
            if(maxreach < i)   return -1;
            if(i+A[i] > maxreach) {
                maxreach = i+A[i];
                cnt++;
            }
            if(maxreach >= A.length-1)    return cnt;
        }
        
        return cnt;
    }




跳跃游戏 跳到最后一格去!之n种解法 论跳跃游戏的n种解法 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 这道题很有意思,相当有趣。有趣之处就在于它的解法很多,花样十足。我们从思路最简单的开始说起。 解法一 遍历递归(回溯法) 我们来看题目,好啊,既然每格的数字代表所跳的最大... 阅读详情

相关推荐

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用

本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。

weixin_29224309的博客 1008

跳跃游戏

给出一个非负整数数组,你最初定位在数组的第一个位置。    数组中的每个元素代表你在那个位置可以跳跃的最大长度。     判断你是否能到达数组的最后一个位置。 样例 A = [2,3,1,1,4],返回 true. A = [3,2,1,0,4],返回 false. 注意 这个问题有两个方法,一个是贪心和 动态规划。 贪心方法时间复杂度为O(N)。 动态规划方

brucehb的专栏 604

STM32CubeIDE离线安装芯片PACK包全攻略(附离线包下载与导入步骤)

本文详细介绍了在STM32CubeIDE中离线安装芯片PACK包的完整流程,包括官方和第三方资源获取方法、本地安装步骤及常见问题解决方案。特别针对网络隔离环境下的嵌入式开发需求,提供了实用的版本管理和自动化部署技巧,帮助开发者高效完成芯片固件支持包的离线配置。

weixin_30825581的博客 299

LeetCode算法 - LCP09 最小跳跃次数

leetcode 算法

一念之间 一心向阳 2436

【AutoSar CP】SoAd模块

比如对于特定的PDU,其PduId在程序编译时就确定了,但是在代码运行中,该PduId可能需要发送到不同的远端ip,这时就需要用SoAd来设置连接远端地址信息。SoAdSocketConnectionGroup(连接参数)SoAdSocketRoute(接收数据)SoAdRoutingGroup(开关)SoAdPduRoute(发送数据)

至道无难,唯嫌拣择。 1685

保姆级教程:用MATLAB搞定运动模糊图片修复(附完整代码与避坑指南)

本文提供了一份详细的MATLAB运动模糊图片修复教程,涵盖盲复原、图像复原等核心技术。通过傅里叶变换和Radon变换分析模糊参数,对比逆滤波、维纳滤波和Lucy-Richardson算法效果,并附完整代码与避坑指南,帮助用户实现专业级图像处理。

weixin_26765363的博客 228

贪心算法典型应用之——以最小前进次数到达数组最后一个位置

1、题目说明: 输入一个所有元素都是自然数的数组,初始状态你的位置位于第1个元素,每个元素的位置表示1步,当前所在位置的元素数值表示你下一次前进能够移动的最大步数,你的目标是以最小的前进次数从数组的第一个元素移动到数组的最后一个元素位置,你需要输出每次前进的步数。 2、举例: 输入 : 2 3 1 1 4 输出 : 1 3  3、思路分析: 首先,我们通过分析题意,可以看出该...

相由心生的博客 1963

深入解析Incapsula reese84的生成机制与绕过策略

本文深入解析了Incapsula reese84的生成机制与绕过策略。reese84是一种基于客户端JavaScript挑战的Web安全防护,通过动态算法收集浏览器指纹并生成令牌Cookie。文章详细拆解了其两步验证流程,并提供了使用无头浏览器、逆向JS模拟请求以及Token维护等实战绕过方法,帮助开发者和安全研究人员应对自动化访问拦截。

weixin_29256771的博客 443

华为:题目描述 给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。

题目: 题目描述 给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。 代码: import java.util.Scanner; /*题目描述 给出一组正整数,你从第一个数向最后一个数方向跳跃, 每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次...

王文强的博客 4400

YOLOv8改进 | 注意力篇 | 一文带你改进GAM、CBAM、CA、ECA等通道注意力机制和多头注意力机制

官方论文地址:官方论文地址点击此处即可跳转官方代码地址:官方代码地址点击此处即可跳转GAM旨在通过设计一种机制,减少信息损失并放大全局维度互动特征,从而解决传统注意力机制在通道和空间两个维度上保留信息不足的问题。GAM采用了顺序的通道-空间注意力机制,并对子模块进行了重新设计。具体来说,通道注意力子模块使用3D排列来跨三个维度保留信息,并通过一个两层的MLP增强跨维度的通道-空间依赖性。

Snu77的博客 4万+

【异常】解决 Cursor 报错 Unexpected seqno: 2 != 1. Please try again, or contact support if the issue 的排坑指南

在使用 Cursor 辅助编程时,你是否遇到过 AI 突然中断输出,并在右下角弹出一个红色的 Network Error 弹窗?今天我们就来彻底解析并解决这个网络断连问题。

奶爸的编程之路,也就一周冷个三天 2470

跳跃游戏二

给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 你的目标是到达最后一个下标,并且使用最少的跳跃次数。 例如: A=[2,3,1,1,4]A = [2,3,1,1,4]A=[2,3,1,1,4],到达最后一个下标的最少跳跃次数为 222。(先跳跃 111 步,从下标 000 到 111,然后跳跃 333 步,到

Joe19310的博客 583

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

YOLO 系统尊嘟太卷了吧,YOLOv11 还没完明白,YOLOv12 就重磅来袭,YOLOv12 是由纽约州立大学联合中科院在 2025年2月19 日发布,从 YOLOv12 论文题目我们大概就知道做了那些更新 ,下图是YOLOv12 在 COCO 数据集上的性能表现引入区域注意力机制(area-attention):通过引入十字形窗口自我注意机制,沿水平和垂直条纹计算注意力机制,纵横交错的注意机制。如下图所示,区域注意力采用最多简单的等分方法,将特征地图垂直或水平划分为 L 个区域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6万+

【计蒜客系列】挑战难题20:跳跃游戏二

题目来源:计蒜客 给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 你的目标是到达最后一个下标,并且使用最少的跳跃次数。 例如: A = [2,3,1,1,4], 到达最后一个下标的最少跳跃次数为2.(先跳跃1步,从下标0到1,然后跳跃3步,到达最后一个下标。一共两次) 格式: 第一行输入一个正整数n,接下来的一行

帕其维克的世界 2023

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

起点到终点的最少步数(广度优先搜索)

1. 问题描述: 给定一个n * m大小的迷宫,其中*代表不可通过的墙壁,而.代表平地,S表示起点,T表示终点,移动过程中,如果当前位置是(x,y)(下标从0开始),而且每次只能前往上下左右(x,y + 1)(x,y -1)(x - 1,y)(x + 1,y)四个位置的平地,求从起点S到达终点T的最少步数 ..... .*.*. .*S*. .***. ...T* 2. 思路分析: ①...

二哈 2865

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

寻找最少次跳数 - 贪心VS动态规划 Jump Game 2

非常好的问题:Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Your

LUCKYOJ 4671

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NYOJ-58 最小步数

  最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列:  1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,0,1,0...

weixin_33737774的博客 487

给定一个非负整数数组,最初定位在数组的第一个索引处。组中的每个元素表示您在该位置的最大跳跃长度。求最小跳数

本题源自leetcode  45 ------------------------------------------------------------------------- 思路:用俩个 变量标识当前的位置  和 下一步能调到最远的位置。 代码: int jump(vector& nums) { int n = nums.size();

i_am_bird的博客 5935

最小跳跃步

最小步数移动到数组末尾: 给定一个数组,里面全是正整数。数字大小表示这一步最多可以向后移动几个节点。 总是从数组第一个元素开始移动。问如何移动,可以以最少步数移动到最后一个节点。 例如:[3,4,2,1,3,1]初始状态指向3表示下一步可以移动1格,或者2格,或者3格。 最优的方式是指向3的时候移动一步,第二次选择移动4步,一共只需要两步即可移动到数组尾。 public int mini...

cygcsdn的博客 885

贪心算法-leetcode#45-最少跳跃步数

class Solution { public: int jump(vector<int>& nums) { //每一跳选择,下一条可达位置最远的那一个。 if(nums.size()==0) return 0; int step=0; for(int i=0;i<nums.size();i++){ nums[i]+=i;//当前i可达的最大下标 } int i=0; while(i<nums..

u011089927的专栏 900

跳步游戏2--返回最小跳步数

leetcode 45. Jump Game II一、问题描述        给定一个非负整数数组,初始情况位于数组的第一个索引处。数组中的每个元素表示该位置的最大跳跃长度。要求达到最后一个索引花费的最小跳跃次数。&lt;举例&gt;输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个索引的最小跳数为2。从索引0跳到1跳1步,然后跳3步到最后一个索引。二、解题方法一:动态规划 -- 超时g...

qiki_糖没味儿的程序媛小屋 946

python【暴力解法】找终点:nums 正整数数组,求第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。

找终点 nums正整数数组,求第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数 要求:第一步从第一个元素开始,且1<=第一步的步长<len/2 第二步开始,只能以所在成员的数字走响应的步数,不能多也不能少,如果目标不可达返回-1,只输出最少的步骤数量 s='759426835439' def findEnd(): nums = list(map(int,input().split())) # nums = [7, 5, 8, 4, 2, 7, 8,...

u013364875的博客 1237

用最少的步数从1跳到n(Java)

用最少的步数从1跳到n (牛客网—牛客题霸算法篇—NC148) 题目描述 给定一个长度为 n 的数组 a。 ai 表示从 i 这个位置开始最多能往后跳多少格。 求从 1 开始最少需要跳几次就能到达第 n 个格子。 思路 Java实现 动态规划+贪心算法 dp[i]=dp[i-x]+1,其中x为当前能跳的格子个数 从前向后进行贪心 首先计算当前最远可到达位置(记为cur),如果当前位置i已经在上一个最远可到达位置(pre),说明下一步一定能够到达cur,此时steps加一,同时跟新pre的值。 代码实现 动态

ln01010的博客 799

java求最小步数_java – 找到两点之间的最小步数?

对于你的问题,我认为BFS仍然有效.使用BFS解决传统的迷宫问题,从头开始,你必须:1. Enqueue every point that is accessible (not a piece of wall, and not visited) and connected to the current point.2. Dequeue current point and mark it as VI...

weixin_39956353的博客 229

【LeetCode】给定数组,跳到最后一个元素的最少步数:Jump Game II

Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Your goal is to reach the last index in the minimum number of jumps. E

Arlingtonroad的博客 1987

lintcode-跳跃游戏II-117

给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。    你的目标是使用最少的跳跃次数到达数组的最后一个位置。 样例 给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次) class Solutio

我有一个梦想 1532
上一篇: Unique Paths II 求在矩阵里从左上走到右下的总方法数(有障碍)@LeetCode
下一篇: Gray Code 格雷码 @LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值