【LeetCode】55. 跳跃游戏(给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。)、45. 跳跃游戏 II

2023-11-05

55. 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例 1:
输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。
示例 2:
输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

分析:

指针i从倒数第二位往前遍历,n代表步数,初始为1,
若nums[i]大于或等于n,说明从此位置可以跳到最后一位,并从此位置截断,此位置便为最后一位
若nums[i]小于n,说明从此位置不能跳到最后一位,则n++,向前遍历查看其它位置是否能跳到最后一位,
遍历到最后一位时步数大于1,说明跳跃游戏会失败,返回false,否则返回true.

代码:

public class LeetcodeTest {
	public static void main(String[] args) {
		Solution So = new Solution();
		int[] nums = {2,3,1,1,4};
		System.out.println(So.canJump(nums));
	}
}
class Solution {
    public boolean canJump(int[] nums) {
    	int n = 1;
    	for(int i=nums.length-2; i>=0; i--){
    		if(nums[i] >= n){
    			n=1;
    		}else{
    			n++;
    		}
    		if(i==0 && n>1){
    			return false;
    		}
    	}
    	return true;
    }
}

45. 跳跃游戏 II
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
说明:
假设你总是可以到达数组的最后一个位置。

分析:

要使用最少的跳跃次数到达数组的最后一个位置,那就要在每一步都寻找最优的跳法,最终就会得到全局最优的跳法。
在每一个跳到的位置上先判断能否直接跳到最后一个位置,如果能,那么这一步就是当前最优的,
如果不能,就去寻找下一步的最优位置,找到之后再跳过去。
下一个最优的地方即下一个可以跳最大步数的地方,即下面代码中nums[j]最大。

代码:

public class LeetcodeTest {
	public static void main(String[] args) {
		Solution So = new Solution();
		int[] nums = {2,3,1,1,4};
		System.out.println(So.jump(nums));
	}
}
class Solution {
    public int jump(int[] nums) {
    	int i=0;
        int res = 0;
        while(i<nums.length-1){
        	int steps = nums[i];
        	//最后一步是个特例,不需要寻找下一个位置,如果能在此时跳到最后一个位置,这一步就是最优的。
        	if(steps>=nums.length-1-i){
        		res++;
        		break;
        	}
        	//跳到下一个最优的地方
        	int max = nums[i+1];//记录最大步数
        	int index = i+1;//记录索引
        	for(int j=index; j<=i+steps && j<nums.length-1; j++){
        		if(nums[j]+j-index >= max){
        			max = nums[j];
        			index = j;
        		}
        	}
        	res++;
        	i = index;
        }
        return res;
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【LeetCode】55. 跳跃游戏(给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。)、45. 跳跃游戏 II 的相关文章

随机推荐

  • 关于解决多台服务器间的文件实时同步问题

    最近要做一个相关的解决方案 在虚拟机测试没有问题 给大家分享出来 有更好的解决方案 欢迎讨论 1 1 inotify相关介绍 1 rsync 与传统的cp tar备份方式相比 rsync具有安全性高 备份迅速 支持增量备份等优点 通过rsy
  • java NIO

    概述 NIO主要有三大核心部分 Channel 通道 Buffer 缓冲区 Selector 选择器 NIO 与 IO的区别 IO是面向流的 NIO是面向缓冲区的 Java IO面向流意味着每次从流中读一个或多个字节 直至读取所有字节 它们
  • 晦涩难懂的电路反馈,看完终于懂了!

    一 反馈的基本概念 1 1 什么是反馈 反馈 就是把放大电路的输出量的一部分或全部 通过反馈网络以一定的方式又引回到放大电路的输入回路中去 以影响电路的输入信号作用的过程 1 2 放大电路中引入反馈的作用 放大电路静态工作点会随温度的变化而
  • GDI+ Graphics类

    1 GDI 的核心 Graphics类 1 The Graphics class provides methods for drawing lines curves figures images and text A Graphics ob
  • 操作系统期末复习总结

    操作系统期末复习总结 第一章 操作系统引论 1 1操作系统的目标和作用 1 1 1操作系统的目标 在计算机系统上配置操作系统 其主要目标是 方便性 有效性 可扩充性和开放性 方便性 配置OS后方便使用 有效性 提高系统资源的利用率 可扩充性
  • 西门子S7-1200PLC脉冲控制伺服程序案例

    西门子S7 1200PLC脉冲控制伺服程序案例 此程序是关于西门子1200PLC以PTO脉冲方式控制伺服电机 步进电机的功能块程序 包含两套程序 第一套程序是用梯形图写的 第二套程序是用SCL高级编程语言写的 两套程序实现的功能一致 脉冲模
  • C++——内存分区

    内存分区模型 内存分区 四大分区 编译后运行前 程序运行后 栈区 堆区 1 new使用 2 释放空间 3 new 数组 内存分区 四大分区 代码区 二进制代码 操作系统管理 全局区 全局变量 静态变量 常量 栈区 编译器自动分配释放 函数的
  • laravel 8实现 订单表按月份水平分表

    实现思路 1 设计基础表orders 2 通过后台代码创建今年6月份订单表 order 202206 今年7月份订单表 order 202207 创建表的时候需要进行判断 如果表存在 则不需要创建 这个后台代码会被多次使用并可以重复使用 选
  • Android 开发最佳实践

    https github com futurice android best practices blob master translations Chinese README cn md 组织好它们 在layoutout XMLs布局时
  • windows 向 iPad导入文件

    iPad导入 步骤 截图 步骤 Windows 下载 iTunes 打开 iTunes 账户 gt 授权 gt 对这台电脑授权 然后输入账户密码登陆 找到当前设备 gt 文件共享 gt 找到对应程序 gt 添加文件 截图
  • elementPlus自动按需导入图标

    最近在使用Vue3重构自己的项目 需要用到elementPlus里面的图标 vite中已经配置了elementPlus中的组件自动按需引入 看看图标引入的相关文档 没道理为了图标又全局引入elementPlus吧 于是就有了图标自动按需引入
  • es or查询

    跨索引查询 SearchRequest request new SearchRequest index1 index2 想实现类似于 select from table where a 1 and b 1 or startTime gt 2
  • 数据结构与算法(十)图的入门

    图的实际应用 在现实生活中 有许多应用场景会包含很多点以及点点之间的连接 而这些应用场景我们都可以用即将要学习的图这种数据结构去解决 地图 我们生活中经常使用的地图 基本上是由城市以及连接城市的道路组成 如果我们把城市看做是一个一个的点 把
  • 传输层的TCP和UDP

    TCP IP 中有两个具有代表性的传输层协议 分别是 TCP 和 UDP TCP 是面向连接的 可靠的流协议 流就是指不间断的数据结构 当应用程序采用 TCP 发送消息时 虽然可以保证发送的顺序 但还是犹如没有任何间隔的数据流发送给接收端
  • 【MySQL SQL语句】DROP TABLE简述

    标准语法 DROP TEMPORARY TABLE IF EXISTS tbl name tbl name RESTRICT CASCADE DROP TABLE 删除一个或多个表 你必须对每个表具有DROP权限 注意 使用此语句时要小心操
  • 打开Vue项目时出现“error:03000086:digital envelope routines::initialization error”的解决方法

    首先看用 VSCode 打开 Vue项目 清除 npm 缓存 因为 npm 有缓存时 常常出现安装依赖不成功的现象 并且一旦出现问题 报错信息很完善 但根据报错信息一项一项去解决 却很容易陷入解决不了关键问题的死循环当中 找不出原因 控制台
  • 瑞芯微RK3128的gpio控制--输入输出和中断

    第一章 gpio的dts设置 1 输出引脚 reset gpios lt gpio0 GPIO D1 GPIO ACTIVE HIGH gt 以上参数分别对应 引脚的名称 第几组gpio 第几个引脚 工作模式 注 以上配置对应为 GPIO0
  • 20.状态模式

    状态模式 一 状态模式 1 状态模式 1 状态模式 State Pattern 它主要用来解决对象在多种状态转换时 需要对外输出不同的行为的问题 状态和行为是一一对应的 状态之间可以相互转换 2 当一个对象的内在状态改变时 允许改变其行为
  • NodeJs创建应用基本流程

    1 创建根目录 2 初始化package json npm init y 3 创建入口文件app js var express require express var path require path var app express ap
  • 【LeetCode】55. 跳跃游戏(给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。)、45. 跳跃游戏 II

    55 跳跃游戏 给定一个非负整数数组 你最初位于数组的第一个位置 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个位置 示例 1 输入 2 3 1 1 4 输出 true 解释 从位置 0 到 1 跳 1 步 然