当前位置: 首页 > news >正文

力扣 —— 跳跃游戏

题目一(中等)

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

题目思路

从终点向前遍历,一开始的 target 设置为 n - 1, 遍历指针 i 设置为 n - 2,当 i 遍历过起点(index 为 0)后遍历结束。if (i + nums[i] >= target) target = i 这个判断的含义是,如果从当前位置跳跃最大长度可以到达此时的 target,那么我们就把 target 更新为此时的 i (因为如果到达此时的 i , 就可以到达原本的 target,如此循环,一定可以到达一开始的 target 也就是最后一个下标 n - 1),然后 i-- 向前遍历,重复这个过程直到循环结束。 最后判断 if target == 0 ,说明从起始点开始一定有一个策略可以一直跳到最后一个下标,返回 true,否则说明不存在这样的策略,返回 false,游戏结束。

答案

class Solution {public boolean canJump(int[] nums) {int target = nums.length -1;int i = target -1; while(i >= 0){if(i + nums[i] >= target){target = i;}i--;}return target == 0 ; }
}

题目二(中等)

给定一个长度为 n0 索引整数数组 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:

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

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104
  • 题目保证可以到达 nums[n-1]

题目思路

贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最小步数。要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数!

在这里插入图片描述

答案

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;}
}
http://www.lryc.cn/news/451660.html

相关文章:

  • SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异
  • 工具介绍---效率高+实用
  • 本地部署开源在线PPT制作与演示应用PPTist并实现异地远程使用
  • leetcode_238:除自身以外数组的乘积
  • 网络协议详解--IPv6
  • 阿里云域名注册购买和备案
  • 【经典机器学习算法】谱聚类算法及其实现(python)
  • 【Linux】Linux环境基础开发工具使用
  • Halcon基础系列1-基础算子
  • 【AI大模型】深入Transformer架构:编码器部分的实现与解析(上)
  • spring学习日记-day7-整合mybatis
  • 【YOLO目标检测行人与车数据集】共5607张、已标注txt格式、有训练好的yolov5的模型
  • JMeter中线程组、HTTP请求的常见参数解释
  • 优化Mysql
  • 如何使用MethodChannel通信
  • 【JavaWeb】JavaWeb笔记 HTTP
  • Java项目实战II基于Java+Spring Boot+MySQL的甘肃非物质文化网站设计与实现(源码+数据库+文档)
  • 数据结构--包装类简单认识泛型
  • c#使用winscp库实现FTP/SFTP/SCP的获取列表、上传和下载功能
  • 【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-1
  • 达梦数据库开启归档模式
  • C++ 语言特性07 - 静态成员的初始化
  • 【数据结构】图论基础
  • HTML5实现好看的唐朝服饰网站模板源码2
  • golang web笔记-2.请求request
  • docker的安装与启动——配置国内Docker源
  • httpsok-v1.17.0-SSL通配符证书自动续签
  • 相机、镜头参数详解以及相关计算公式
  • 【微服务】组件、基础工程构建(day2)
  • ESP32微信小程序SmartConfig配网