phpnow 搭建网站,网站建设总体上可划分为两个阶段,电子商务网站技术,工信部备案55. 跳跃游戏 题目描述#xff1a;给你一个非负整数数组 nums #xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标#xff0c;如果可以#xff0c;返回 true #xff1b;否则#xff0c;返回…55. 跳跃游戏 题目描述给你一个非负整数数组 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 nums.length 10^40 nums[i] 10^5 代码思路
初始化dp 数组,用来记录从索引 0 到当前索引 i 可以跳跃的最大距离。首先将 dp[0] 初始化为 nums[0],因为从索引 0 出发最多可以跳 nums[0] 个步骤。定义一个变量 max,用来记录当前可以跳跃的最大距离。初始化为 dp[0]。遍历数组 nums 的其余部分,对于每个索引 i: 如果 i 已经超出了当前可以跳跃的范围(i max),说明无法到达该位置,直接返回 false。dp[i]Math.max(inums[i],dp[i-1]): 更新 dp[i] 为从索引 i-1 出发最远可以跳到的距离和从索引 i 出发最远可以跳到的距离的最大值。更新 max 为当前可以跳跃的最大距离。剪枝如果 max 已经大于等于 nums.length - 1,说明可以从索引 0 跳到最后一个索引,直接返回 true。如果整个循环结束,仍然无法从索引 0 跳到最后一个索引,返回 false。
时间复杂度为 O(n),空间复杂度为 O(n),其中 n 是数组 nums 的长度。它使用动态规划的方法,利用了 dp 数组来记录当前可以跳跃的最大距离,从而避免了重复计算,达到了较高的效率。
class Solution {public boolean canJump(int[] nums) {int[] dp new int[nums.length];dp[0] nums[0];int max dp[0];if (max nums.length - 1) {return true;}for (int i 1; i nums.length; i) {if (i max) {return false;}dp[i] Math.max(i nums[i], dp[i - 1]);max Math.max(dp[i], max);if (max nums.length - 1) {return true;}}return false;}
}