Java跳跃游戏实例真题解决思路详解

目录
  • 变式题—跳跃游戏 I
    • 一、题目描述
    • 二、思路
    • 三、代码
  • 变式题—跳跃游戏 II
    • 一、题目描述
    • 二、思路
    • 三、代码

变式题—跳跃游戏 I

一、题目描述

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。

来源:https://leetcode.cn/problems/jump-game/

示例:

二、思路

本题可以使用贪心法解决,对每个能到达的位置(可覆盖到的位置),计算其每次能覆盖的最大长度,判断最大长度是否能达到数组尾即可。

图解:

三、代码

    // 跳跃游戏问题,判断能否达到数组尾
    public boolean canJump(int[] nums) {
        int len = nums.length;
        int cover = 0; // 初始位置为第一个点
        for(int i=0; i<=cover; i++){
            cover = Math.max(cover, i + nums[i]); // 更新最大 cover
            if(cover >= (len - 1)){ // 可达到最后的位置
                return true;
            }
        }
        return false;
    }

变式题—跳跃游戏 II

一、题目描述

给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。

链接:https://leetcode.cn/problems/jump-game-ii

二、思路

本题只有一个关键点,那就是什么时候更新 ans,使得结果是最小跳跃步数

回答:当前位置为最大 cover 时,需要更新 ans,按这种情况更新的 ans 为最小跳跃步数

三、代码

// 版本一
class Solution {
    public int jump(int[] nums) {
        if (nums == null || nums.length == 0 || nums.length == 1) {
            return 0;
        }
        //记录跳跃的次数
        int count=0;
        //当前的覆盖最大区域
        int curDistance = 0;
        //最大的覆盖区域
        int maxDistance = 0;
        for (int i = 0; i < nums.length; i++) {
            //在可覆盖区域内更新最大的覆盖区域
            maxDistance = Math.max(maxDistance,i+nums[i]);
            //说明当前一步,再跳一步就到达了末尾
            if (maxDistance>=nums.length-1){
                count++;
                break;
            }
            //走到当前覆盖的最大区域时,更新下一步可达的最大区域
            if (i==curDistance){
                curDistance = maxDistance;
                count++;
            }
        }
        return count;
    }
}

到此这篇关于Java跳跃游戏实例真题解决思路详解的文章就介绍到这了,更多相关Java跳跃游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java实现warcraft java版游戏的示例代码

    目录 前言 主要需求 功能截图 代码实现 启动入口 ModelAttacker类 ModelUnit类 总结 前言 致敬经典的warcraft,<warcraft java版>是一款即时战略题材单机游戏,采用魔兽原味风格和机制.收集资源,建造防御工事,消灭所有敌军. 人类:洛丹伦人类联盟自兽人首次穿过黑暗之门时便告成立.他们坚韧不拔,勇敢无畏,身穿坚甲,手握利刃,英勇迎敌. 兽人:兽人是一个粗犷而坚韧的种族,他们身穿简单的皮毛和带有尖刺的皮甲,以肆意凶狠的战斗风格而闻名. 用java语言实现,

  • Java实现贪吃蛇游戏的示例代码

    目录 项目演示 项目实战 1. 游戏的主启动类 2. 游戏的面板 3. 数据中心 4. 绘制静态面板 5. 绘制静态小蛇 6. 绘制动态小蛇 7. 设置游戏状态 8. 让蛇动起来 9. 绘制食物布局 10. 游戏失败判定 11. 积分获取系统 12. 游戏优化 项目演示 项目演示地址 项目实战 1. 游戏的主启动类 作为贪吃蛇游戏的主启动类,构建了顶级窗口,可以容纳各种面板, package Snake; import javax.swing.*; /** * 游戏的主启动类 */ public

  • Java实现扑克牌游戏的示例代码

    目录 一.三人扑克 二.具体实现 Card类 生成52张牌 打乱顺序 发牌 三.完整代码 一.三人扑克 想不想带上好朋友来上一局三人扑克呢. 二.具体实现 Card类 定义一个花色color变量和一个大小rank变量. public class Card { public int rank; public String color; @Override public String toString() { return String.format("[%s,%d]",color,ran

  • Java跳跃游戏实例真题解决思路详解

    目录 变式题—跳跃游戏 I 一.题目描述 二.思路 三.代码 变式题—跳跃游戏 II 一.题目描述 二.思路 三.代码 变式题—跳跃游戏 I 一.题目描述 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 .数组中的每个元素代表你在该位置可以跳跃的最大长度.判断你是否能够到达最后一个下标. 来源:https://leetcode.cn/problems/jump-game/ 示例: 二.思路 本题可以使用贪心法解决,对每个能到达的位置(可覆盖到的位置),计算其每次能覆盖的最大长度,

  • Android 实现抖音小游戏潜艇大挑战的思路详解

    <潜水艇大挑战>是抖音上的一款小游戏,以面部识别来驱动潜艇通过障碍物,最近特别火爆,相信很多人都玩过. 一时兴起自己用Android自定义View也撸了一个,发现只要有好的创意,不用高深的技术照样可以开发出好玩的应用.开发过程现拿出来与大家分享一下. 项目地址: https://github.com/vitaviva/ugame 基本思路 整个游戏视图可以分成三层: camera(相机):处理相机的preview以及人脸识别 background(后景):处理障碍物相关逻辑 foregroun

  • 线上Spring CPU 高负载解决思路详解

    目录 引言 定位问题 日志搜索 监控看板 ThreadDump 优化 事后反思 引言 背景: 在某一天,运营同事突然发现运营看板好几天没有更新数据了, 然后找了过来?! 这里看似抛出了一个问题 ? 但细想一下, 同时暴露了我们对于线上服务的监控未完全覆盖到!!! 这是致命的!!! 当然, 这篇文章先不讨论监控的问题, 后面会推出完善的监控方案 定位问题 问题抛过来了, 那么我们第一步要怎样做呢? 拿到问题的第一步, 先理解题意, 这里有几个关键的信息点 第一 : 好几天, 具体哪一天, 这个后面

  • Java Date(日期)对象进行格式化的思路详解

    Java日期时间格式化的概念 我们在日常的开发过程中常常会碰到关于日期时间的计算与存储问题,比如我们要把一个当前时间类型转换成字符串类型,我们会直接使用Util包下的Date数据类型(java.util.Date)来创建时间对象,例如:Date date = new Date();但如果我们对其对象进行打印会发现时间的数据值如下:Fri Jul 24 16:02:44 GMT+08:00 2020,这是一个标准的带时区的系统时间,这样的数据并不方便我们的阅读与管理,在此我们就可以考虑能否将时间进

  • 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决思路详解

    发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (var db = new SmsEntities()) { Parallel.For(0, 1000, (i) => { db.MemberCard.Add(new MemberCard() { CardNo = "NO_" + i.ToString(), Banlance = 0, C

  • Java中静态类型检查是如何进行的实例思路详解

    以下内容来自维基百科,关于静态类型检查和动态类型检查的解释: •静态类型检查:基于程序的源代码来验证类型安全的过程: •动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 以下代码是一个例子,理解了他,你会更好的理解Java静态类型检查是如何工作的. 代码示例 假定我们有如下类,A和B,B继承A. class A { A me() { return this; } public void do

  • Java青蛙跳台阶问题的解决思路与代码

    问题描述 一只青蛙一次可以跳上1级台阶,也可以一次跳上2级台阶,请问跳上n级台阶,该请娃一共有多少种跳法? 解决思路 ①如果只有1级台阶,那显然只有一种跳法. ②如果有2级台阶,那么就有2种跳法,一种是分2次跳.每次跳1级,另一种就是一次跳2级. ③如果台阶级数大于2,设为n的话,这时我们把n级台阶时的跳法看成n的函数,记为,第一次跳的时候有2种不同的选择:一是第一次跳一级,此时跳法的数目等于后面剩下的n-1级台阶的跳法数目,即为,二是第一次跳二级,此时跳法的数目等于后面剩下的n-2级台阶的跳法

  • Java异常处理运行时异常(RuntimeException)详解及实例

      Java异常处理运行时异常(RuntimeException)详解及实例 RuntimeException RunntimeException的子类: ClassCastException 多态中,可以使用Instanceof 判断,进行规避 ArithmeticException 进行if判断,如果除数为0,进行return NullPointerException 进行if判断,是否为null ArrayIndexOutOfBoundsException 使用数组length属性,避免越

  • Java 方法递归的思路详解

    目录 前言 一.什么是方法递归 二.什么场景下能用递归 三.如何写出递归代码-重点 总结 前言 今天给老铁们回顾一下递归的思路以及方法,也是给自己的一个归纳总结. 一.什么是方法递归 所谓的方法递归,就是在一个方法(函数)执行的内部,自己调用了自己的过程,称之为 “递归” . 递归分为两个子过程: 递过程:函数不断地调用自身,直到走到函数的终止条件,第一阶段结束. 归过程:函数不断地返回的过程. 例如, 我们求 N! 起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束

  • JQuery手速测试小游戏实现思路详解

    (-1)写在前面 我用的chrome49,jquery3.0,我得到过399分,信不信由你. (1)设计思路 两个p元素放在div里,每个p元素的高度和宽度都和div一样,当鼠标放在div上时,第一个p向上移动(更改marginTop值),当鼠标离开div上时,第一个p向下移动. (2)知识储备 a. :nth-child #lol p:nth-child(1),当前元素p相对于他的父元素的所有子元素,如果第一个元素是p则匹配成功. #lol :nth-child(1) 相当于#lol *:nt

随机推荐