55. 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。
输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

//感想:一开始感觉没什么思路感觉像是那种搜索树的结构,想去看下答案,我点开题解的一刹那,我看见了四个字动态规划,我果断地回到了题目描述的界面,算是没看答案吧。。。

//思路:从底向上动态规划,我们声明一个dp数组,初始值最后一个元素设置为true,那肯定可以啊,然后往前走,如果遍历到的元素它的值为step,我们就可以从这个位置到加上step的位置所有的元素都可以抵达,也就说这中间只要有一个为true,那么这个位置就为true,如果走到step还是为false,说明这个位置走不到末尾,设为false,就这样走到头,得到第一个元素可以到达末尾不。

下面是代码:

 1 class Solution {
 2     public boolean canJump(int[] nums) {
 3         if(nums==null||nums.length==0)
 4             return false;
 5         int n=nums.length;
 6         boolean[] dp=new boolean[n];
 7         dp[n-1]=true;
 8         for(int i=n-2;i>=0;i--)
 9         {
10             int step=nums[i];
11             for(int j=1;j<=step;j++)
12             {
13                 if(dp[i+j]==true)
14                 {
15                     dp[i]=true;
16                     break;
17                 }
18             }
19         }
20         return dp[0];
21     }
22 }

原文地址:https://www.cnblogs.com/cold-windy/p/11751279.html

时间: 2024-10-04 18:14:04

55. 跳跃游戏的相关文章

[leetcode] 55. 跳跃游戏

55. 跳跃游戏 分明就是45. 跳跃游戏 II的缩水版本嘛..??,难度高的版本居然放在了前面,把像我这种有强迫症的必须按照题号刷题的人不放在眼里么... class Solution { public boolean canJump(int[] nums) { return jump(nums) != Integer.MAX_VALUE; } public int jump(int[] nums) { int f[] = new int[nums.length]; if (nums.leng

LeetCode 55. 跳跃游戏(Jump Game)

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

LeetCode——55. 跳跃游戏

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

55. 跳跃游戏-LeetCode

心得:这道题开始想的是剪枝和回溯,但是没想到思路,然后看题解 发现动态规划真的简单,从后往前看,遍历倒数第二个元素,如果他能到达 最后,这说明这个点能到达,遍历倒数第三个,如果这个点能到达第二个,那么他一定能 到达最后一个,问题规模逐渐缩小. 1 class Solution { 2 public boolean canJump(int[] nums) { 3 int index=nums.length-1; 4 for(int i=index-1;i>=0;i--) 5 { 6 if(i+nu

跳跃游戏

跳跃游戏 给定一个非负整数数组,假定你的初始位置为数组第一个下标. 数组中的每个元素代表你在那个位置能够跳跃的最大长度. 请确认你是否能够跳跃到数组的最后一个下标. 例如: A = [2,3,1,1,4], return true. A = [3,2,1,0,4], return false. 格式: 第一行输入一个正整数n,接下来的一行,输入数组A[n].如果能跳到最后一个下标,输出“true”,否则输出“false” 样例1 输入: 5 2 0 2 0 1 输出: true #include

计蒜客 跳跃游戏二(动态规划)

给定一个非负整数数组,假定你的初始位置为数组第一个下标. 数组中的每个元素代表你在那个位置能够跳跃的最大长度. 你的目标是到达最后一个下标,并且使用最少的跳跃次数. 例如: A = [2,3,1,1,4], 到达最后一个下标的最少跳跃次数为2.(先跳跃1步,从下标0到1,然后跳跃3步,到达最后一个下标.一共两次) 格式: 第一行输入一个正整数n,接下来的一行,输入数组A[n]. 最后输出最少的跳跃次数. 样例1 输入: 5 3 1 1 1 1 输出: 2 #include <stdio.h>

计蒜客 跳跃游戏

跳跃游戏 给定一个非负整数数组,假定你的初始位置为数组第一个下标. 数组中的每个元素代表你在那个位置能够跳跃的最大长度. 请确认你是否能够跳跃到数组的最后一个下标. 例如: A = [2,3,1,1,4], return true. A = [3,2,1,0,4], return false. 格式: 第一行输入一个正整数n,接下来的一行,输入数组A[n].如果能跳到最后一个下标,输出“true”,否则输出“false” 样例输入 5 2 0 2 0 1 样例输出 true 1 #include

跳跃游戏 II

题目描述:给出一个非负整数数组,你最初定位在数组的第一个位置.数组中的每个元素代表你在那个位置可以跳跃的最大长度.你的目标是使用最少的跳跃次数到达数组的最后一个位置. 样例:给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次) 跟上一道题:"跳跃游戏"(详见:点击打开链接)基本逻辑是一样的,都是贪心法的应用.其实这道题当中,贪心法用得更明显了. 为了能够以最少的步数跳到最后,则每次

计蒜客-跳跃游戏二 (简单dp)

题目链接:https://nanti.jisuanke.com/t/20                                                            跳跃游戏二 给定一个非负整数数组,假定你的初始位置为数组第一个下标.数组中的每个元素代表你在那个位置能够跳跃的最大长度.你的目标是到达最后一个下标,并且使用最少的跳跃次数. 例如: A = [2,3,1,1,4],到达最后一个下标的最少跳跃次数为 2.(先跳跃 1 步,从下标 0 到 1,然后跳跃 3 步,