新博文地址:[leetcode]Jump Game
http://oj.leetcode.com/problems/jump-game/
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4], return true.
A = [3,2,1,0,4], return false.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4], return true.
A = [3,2,1,0,4], return false.
题目思路是容易理解的,数组中每个数字表示最大跳数,问能不能调到最后一个元素,拿第一个数组A来讲:[2,3,1,1,4]第一个元素是2,即最大跳数是2,好吧,我们就跳两步,跳到了1,good,走一步,还是1,好的继续跳,4,最后一个元素,完成。当然,如果第一步我们不跳两步,跳一步的话,是3,还是可以跳到4的。综合来看,只要可以跳过0,就总是可以跳到最后一个元素的。
但是第二个数组A就不行,因为3,2,1,0这是个坑。。。(坑爹呢!)你是躲不过0的,因此,我的想法就是看看那数组中有没有这样的坑,如果有,再判断这样的坑能不能跳出去,如果存在跳不过去的这样的坑,返回false,其他情况总是true。
下面来看这种坑的特点,首先坑的必要不充分条件是0.。我们假设0的下标是index,则下标为[index - i]的值肯定是 <= index -i,比如,拿第二组测试用例来看,0的下标是3,则下标为2的数字必须 <= 1,下标为1的数字必须<=2,这样才能满足让你只能往坑里跳。。。
再看这样的案例:1,0,2,0
我们从后往前遍历,如果发现存在一个坑,那么就不需要再往前遍历了,因为就算前面顺利通过了,也得搁在这儿,如上例2 ,0其实并不是坑,是可以跳过去的,那继续往前遍历,查看前面是否存在“坑”。好了,发现第二个0,继续往前遍历,发现这个坑你是躲不过的,ok,返回false。
如1,0,1,0这个例子的话,只需要判断两个数字就可以了。
public boolean canJump(int[] A) { int zeroIndex = 0; boolean canJump = true; for(int i = A.length - 1; i >= 0; --i){ if(A[i] == 0){ zeroIndex = i; canJump = false; break; } } if(canJump == false){ for(int i = zeroIndex; i >= 0; i--){ if(A[i] > zeroIndex - i || (A[i] == zeroIndex - i && zeroIndex == A.length - 1)){ canJump = true; } if (A[i] == 0 && i != zeroIndex && canJump) {//只有当后面的坑是可以跳过去的时候,才有必要检查前面的元素 zeroIndex = i; canJump = false; continue; } } } return canJump; }
相关推荐
java java_leetcode题解之Jump Game.java
java java_leetcode题解之Jump Game II.java
1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一步之前的最优解则不作保留 2.由(1)中的介绍,可以知道贪
java入门 java_leetcode题解之055_Jump_Game
js js_leetcode题解之55-jump-game.js
c语言入门 C语言_leetcode题解之45-jump-game-ii.c
js js_leetcode题解之45-jump-game-ii.js
leetcode45题leetcode45题leetcode45题leetcode45题leetcode45题leetcode45题leetcode45题leetcode45题leetcode45题leetcode45题
在“Jump-Game-IV-main”文件中,可能包含了实现这个解决方案的源代码。通过分析和学习这段代码,我们可以更深入地理解上述概念,并了解如何在实际编程中应用这些算法。然而,为了适应大测试用例,可能需要进一步...
leetcode 71 Python用 Python 编写 Leetcode (数据科学家的解决方案) - 易于理解的最佳解决方案,可以通过所有 Leetcode 测试用例,对于非 ...Game II (HARD) Leetcode 51. N-Queens (HARD) Leetcode 52. N-
- **Jump Game**:跳跃游戏,判断是否能到达数组末尾。 - **Gas Station**:寻找最短的加油路线。 - **Candy**:分糖果,确保每个孩子至少得到一块糖,尽可能公平。 - **Word Break**:判断一个字符串是否可以...
- Jump Game / Jump Game II: 第一个问题要求判断是否能到达数组的最后一个位置,第二个问题要求求出最小跳跃次数到达最后一个位置。 - Permutations / Permutations II: 生成所有可能的排列组合,考虑重复元素的...
* Jump Game:给定一个数组,判断是否可以跳跃到数组的末尾。这个题目需要使用贪心算法的思想,将数组分解成更小的子数组,并判断是否可以跳跃到末尾。 * Gas Station:给定一个数组,返回可以到达的加油站数量。这...
- 在 JumpGame 和 MinimumPathSum 题目中,动态规划用于找出跳跃游戏或路径选择中达到最优解的策略。 4. **堆栈**: - 堆栈数据结构可以用于处理与括号匹配、表达式求值等相关的题目。 - 在 ...
4. **Jump Game II**:此问题涉及到广度优先搜索(BFS)或深度优先搜索(DFS)策略,以找出在给定限制下到达最远位置的跳跃次数。它考察了图遍历和优化算法性能的能力。 5. **Sliding Window Maximum**:这是一个...
java lru leetcode :ice_cream: LeetCode Kindem 的个人 LeetCode 题解仓库,欢迎交流学习。 下面的目录中 $number 题号代表经典 LeetCode ...LeetCode ...Jump Game 56 Merge Intervals 64 Minimum Path Sum 73
加油站 leetcode 力扣_实践 标签: leetcode 我的 LeetCode 练习从 2020 年开始 ...Leetcode ...55_Jump_Game 45_Jump_Game_II 121_Best_Time_to_Buy_and_Sell_Stock 122_Best_Time_to_Buy_and_Sell_Stock_
这个内容讲解了贪心算法在 Jump Game 问题中的应用,特别是理解 nums[i] + i 的值在决定是否能跳到下一个位置中的关键作用。 10. 动态规划的题目分为两大类,一种是求最优解类,典型问题是背包问题,另一种就是计数...