什么是html5网站佛山新网站建设服务
news/
2025/9/23 16:13:01/
文章来源:
什么是html5网站,佛山新网站建设服务,网站制作公司都找乐云seo,网站建设要多少钱app【题目描述】 给你一个非负整数数组 nums #xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标#xff0c;如果可以#xff0c;返回 true #xff1b;否则#xff0c;返回 false 。
示例 1你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标如果可以返回 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 所以永远不可能到达最后一个下标。 提示 11 nums.length 104 20 nums[i] 105。
【解题代码】
class Solution {public boolean canJump(int[] nums) {boolean[] mark new boolean[nums.length];return jump(nums, 0, mark);}public boolean jump(int[] nums, int n, boolean[] mark) {mark[n] true;if (n nums.length - 2) return true;for (int i 1; i nums[n]; i) {if (!mark[n i] jump(nums, n i, mark))return true;}return false;}
}
【解题思路】 拿到题目首先想到就是采用递归的方式不断地尝试下一步。按照这个思路很快完成代码编写
class Solution {public boolean canJump(int[] nums) {return jump(nums, 0);}public boolean jump(int[] nums, int n) {if (n nums.length - 2) return true;for (int i 1; i nums[n]; i) {if (jump(nums, n i))return true;}return false;}
}
代码很容易编写但这种简单粗暴的方式性能肯定不过关一提交结果不出所料 分析原因感觉问题应该出现在重复计算的问题即几次的跳跃一旦落到同一个格子里之后的结果肯定是一样的如果避开标记好跳过的格子性能应该会大大提高快速修改代码并提交成功 【解题步骤】
定义一个函数从某个下标开始往后跳看最终是否能跳到最后一格 public boolean jump(int[] nums, int n, boolean[] mark) {// 如果当前下标大于等于数字为不下标返回trueif (n nums.length - 2) return true;// 标记第n个下标已经跳过mark[n] true;// 从第n个下标开始从1步到最大步数依次递归跳跃计算for (int i 1; i nums[n]; i) {// 如果当前下标没有跳过则递推进行跳跃尝试if (!mark[n i] jump(nums, n i, mark))return true;}// 所有步数都尝试不成功最后返回失败return false;
} 定义一个数组标记所有下标是否跳过 boolean[] mark new boolean[nums.length]; 从下标0开始递归跳跃并返回最终结果 return jump(nums, 0, mark);
【思考总结】
递归算法比较简单但会有重复计算的陷阱之前动态规划算法里也提到过了官方的题解算法更简单性能更好大家也可以看看LeetCode解题之前一定不要看题解看了就“破功”了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913114.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!