- 浏览: 137576 次
文章分类
- 全部博客 (189)
- Tree (14)
- Dynamic Programming (34)
- Array (20)
- Search (1)
- Hash (12)
- Backtracking (22)
- Divide and Conque (8)
- Greedy (6)
- Stack (12)
- software (0)
- List (7)
- Math (22)
- Two pointers (16)
- String (20)
- Linux (1)
- Sliding Window (4)
- Finite State Machine (1)
- Breadth-first Search (7)
- Graph (4)
- DFS (6)
- BFS (3)
- Sort (9)
- 基础概念 (2)
- 沟通表达 (0)
- Heap (2)
- Binary Search (15)
- 小结 (1)
- Bit Manipulation (8)
- Union Find (4)
- Topological Sort (1)
- PriorityQueue (1)
- Design Pattern (1)
- Design (1)
- Iterator (1)
- Queue (1)
最新评论
-
likesky3:
看了数据结构书得知并不是迭代和递归的区别,yb君的写法的效果是 ...
Leetcode - Graph Valid Tree -
likesky3:
迭代和递归的区别吧~
Leetcode - Graph Valid Tree -
qb_2008:
还有一种find写法:int find(int p) { i ...
Leetcode - Graph Valid Tree -
qb_2008:
要看懂这些技巧的代码确实比较困难。我是这么看懂的:1. 明白这 ...
Leetcode - Single Num II -
qb_2008:
public int singleNumber2(int[] ...
Leetcode - Single Num II
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.
[分析] 暴力做法是在每个位置 i, 跳 1 到 nums[i]步,看是否能够达到最后,妥妥超时。超时的case正好是无数的 1, 让我想到如果数组中的元素全部是正数,则必然可以跳到最后,因此关键是查看数组中的那些 0 是否可以被跳过,于是产生了方法2,觉得肯定有更优的。翻看自己的历史记录,代码上都比自己精简,更让人气愤的是不理解,orz。网上找了大神们的解析,理解了,而且发现自己之前被Accept的3种做法仅剩1种现在还能被Accept,其余一种就是http://blog.csdn.net/kenden23/article/details/17242835 这篇博客指出的leetcode老test case的漏网之鱼,一种是递归的实现导致statck overflow。非常赞同该博客指出的此题关键是明确结束条件,方法2的结束条件是判断所有的 0 是否可以被跳过,效率是O(n^2), 两篇参考博客中的方法均是O(n),方法4的结束条件是:
记录lastJump的位置,循环i到lastJump,所有位置,找出其中的最大值maxJump =max{ i+A[i]};如果这个区间内的最大值maxJump <= lastJump,那么就返回假,因为没有任何一个位置可以跳出这个位置。 如果没有这样的位置,一直可以跳到最后,那么就返回为真。
方法3, 我的理解,贪婪地往前跳,循环结束的条件是要么到最后了要么无法继续往前跳了。
[PS] ref2博主Code_Ganker认为这题属于DP,希望自己对各种算法思想的理解在不断练习中加深。发现巧妙的解法是一件让人开心的事儿。
[ref]
http://blog.csdn.net/kenden23/article/details/17242835
http://blog.csdn.net/linhuanmars/article/details/21314059
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.
[分析] 暴力做法是在每个位置 i, 跳 1 到 nums[i]步,看是否能够达到最后,妥妥超时。超时的case正好是无数的 1, 让我想到如果数组中的元素全部是正数,则必然可以跳到最后,因此关键是查看数组中的那些 0 是否可以被跳过,于是产生了方法2,觉得肯定有更优的。翻看自己的历史记录,代码上都比自己精简,更让人气愤的是不理解,orz。网上找了大神们的解析,理解了,而且发现自己之前被Accept的3种做法仅剩1种现在还能被Accept,其余一种就是http://blog.csdn.net/kenden23/article/details/17242835 这篇博客指出的leetcode老test case的漏网之鱼,一种是递归的实现导致statck overflow。非常赞同该博客指出的此题关键是明确结束条件,方法2的结束条件是判断所有的 0 是否可以被跳过,效率是O(n^2), 两篇参考博客中的方法均是O(n),方法4的结束条件是:
记录lastJump的位置,循环i到lastJump,所有位置,找出其中的最大值maxJump =max{ i+A[i]};如果这个区间内的最大值maxJump <= lastJump,那么就返回假,因为没有任何一个位置可以跳出这个位置。 如果没有这样的位置,一直可以跳到最后,那么就返回为真。
方法3, 我的理解,贪婪地往前跳,循环结束的条件是要么到最后了要么无法继续往前跳了。
[PS] ref2博主Code_Ganker认为这题属于DP,希望自己对各种算法思想的理解在不断练习中加深。发现巧妙的解法是一件让人开心的事儿。
[ref]
http://blog.csdn.net/kenden23/article/details/17242835
http://blog.csdn.net/linhuanmars/article/details/21314059
public class Solution { // Method 4: O(n) // http://blog.csdn.net/kenden23/article/details/17242835 public boolean canJump (int[] nums) { int lastJump = 0, maxJump = 0; for (int i = 0; i < nums.length - 1; i++) { maxJump = Math.max(maxJump, i + nums[i]); if (i == lastJump) { if (maxJump == lastJump) return false; lastJump = maxJump; } } return true; } // Method 3: O(n), DP // http://blog.csdn.net/linhuanmars/article/details/21314059 public boolean canJump3(int[] nums) { if (nums == null || nums.length == 0) return true; int maxJump = 0; int last = nums.length - 1; for (int i = 0; i <= maxJump && i < last; i++) { maxJump = Math.max(maxJump, i + nums[i]); } if (maxJump < last) return false; else return true; } // Method 2: O(n^2), 依次判断数组中0是否可以被跳过 public boolean canJump2(int[] nums) { int lastZero = -1, currZero = -1; int i = 0; int N = nums.length; while (i < N) { int j = 0; // index which is expected to jump pass currZero while ( j < currZero) { if ((currZero != N - 1 && nums[j] > (currZero - j)) || (currZero == N - 1 && nums[j] >= (currZero - j))) { // currZero can be skipped lastZero = currZero; break; } else { j++; } } if (j == currZero) return false; // search the next zero position while (i < N) { if (nums[i] == 0) { currZero = i; break; } else { i++; } } i++; } return true; } // Method 1: time out public boolean canJump1(int[] nums) { return jump(nums, 0, nums.length - 1); } private boolean jump(int[] nums, int pos, int last) { if (pos >= last) return true; for (int step = 1; step <= nums[pos]; step++) { if (jump(nums, pos + step, last)) return true; } return false; } }
发表评论
-
Leetcode - Ugly Number II
2015-08-24 22:54 1163[分析] 暴力的办法就是从1开始检查每个数是否是丑数,发现丑数 ... -
Leetcode - Paint House II
2015-08-20 20:37 1603There are a row of n houses, ea ... -
Leetcode - Maximum Square
2015-08-16 13:33 507Given a 2D binary matrix filled ... -
Leetcode - Paint House
2015-08-16 10:48 1149There are a row of n houses, ea ... -
Leetcode - Largest Number
2015-08-15 20:16 590Given a list of non negative in ... -
Leetcode - Different Ways to Add Parentheses
2015-07-29 20:21 1200Given a string of numbers and o ... -
Candy
2015-07-05 21:22 382There are N children standing i ... -
Leetcode - Gas Station
2015-07-05 19:51 607There are N gas stations along ... -
Jump Game II
2015-07-05 16:49 544Given an array of non-negative ... -
Leetcode - Interleaving String
2015-06-07 11:41 612Given s1, s2, s3, find whe ... -
Leetcode - Wildcard Matching
2015-06-06 20:01 996Implement wildcard pattern ma ... -
Leetcode - Maximal Square
2015-06-04 08:25 619Given a 2D binary matrix fille ... -
Leetcode - Palindrome Partition II
2015-05-21 21:15 683Given a string s, partition ... -
Leetcode - Palindrome Partition
2015-05-21 09:56 786Given a string s, partition s s ... -
Leetcode - House Robber II
2015-05-20 22:34 772Note: This is an extension of ... -
Leetcode - Maximum Rectangle
2015-05-20 08:58 502Given a 2D binary matrix fill ... -
Leetcode - Scramble String
2015-05-17 14:22 581Given a string s1, we may repre ... -
Leetcode - Regular Expression Matching
2015-05-16 16:31 415Implement regular expression ma ... -
Leetcode - Distinct Subsequences
2015-05-01 16:56 507Given a string S and a string T ... -
Leetcode - Best Time to Buy and Sell Stock IV
2015-05-01 16:11 614Say you have an array for which ...
相关推荐
c语言入门 C语言_leetcode题解之45-jump-game-ii.c
js js_leetcode题解之55-jump-game.js
js js_leetcode题解之45-jump-game-ii.js
c是最好的编程语言 C语言_leetcode题解之55-jump-game.c
1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一步之前的最优解则不作保留 2.由(1)中的介绍,可以知道贪
java入门 java_leetcode题解之055_Jump_Game
- Jump Game / Jump Game II: 第一个问题要求判断是否能到达数组的最后一个位置,第二个问题要求求出最小跳跃次数到达最后一个位置。 - Permutations / Permutations II: 生成所有可能的排列组合,考虑重复元素的...
- 在 JumpGame 和 MinimumPathSum 题目中,动态规划用于找出跳跃游戏或路径选择中达到最优解的策略。 4. **堆栈**: - 堆栈数据结构可以用于处理与括号匹配、表达式求值等相关的题目。 - 在 ...
在描述中提到的"跳跃"可能是指LeetCode中的一个具体问题——跳跃游戏(Jump Game),这是一个经典的动态规划问题。此外,还有"缺失的第一个正数"和"接雨水"这两个问题,它们也是LeetCode上的经典算法题。 1. **缺失...
lru缓存leetcode Go 中解决的一些 Leetcode 问题 大批 ...jump-game-0055 最长公共子序列1143 最长公共子串 最长递增子序列0300 最大积子阵列0152 最大子阵列-0053 唯一路径-0062 word-break-0139 图形
java java_leetcode题解之Jump Game.java
java java_leetcode题解之Jump Game II.java
这个项目可能是某位程序员在刷题过程中积累的代码仓库,记录了他/她在解决LeetCode上的跳跃类问题(Jump Game)的尝试和解决方案。 描述 "leetcode 跳跃 leetcode-golang leetcode个人刷题记录" 强调了该项目的核心...
在“Jump-Game-IV-main”文件中,可能包含了实现这个解决方案的源代码。通过分析和学习这段代码,我们可以更深入地理解上述概念,并了解如何在实际编程中应用这些算法。然而,为了适应大测试用例,可能需要进一步...
此外,动态规划是LeetCode挑战中的重头戏,例如“最长公共子序列”(Longest Common Subsequence)或“跳跃游戏”(Jump Game)。动态规划问题往往需要找出最优解,其解题思路通常涉及到状态转移方程的建立和记忆化...
leetcode 71 Python用 Python 编写 Leetcode (数据科学家的解决方案) - 易于理解的最佳解决方案,可以通过所有 Leetcode 测试用例,对于非 ...Game II (HARD) Leetcode 51. N-Queens (HARD) Leetcode 52. N-
lru缓存leetcode 已解决问题列表 (224) 1两和容易 5最长回文子串中 7反转整数简单 8字符串到整数 (atoi)中 15 3Sum中 20个有效括号简单 21轻松合并两个排序列表 第33章在旋转排序数组中搜索 35搜索插入位置容易 36个...
这个内容讲解了贪心算法在 Jump Game 问题中的应用,特别是理解 nums[i] + i 的值在决定是否能跳到下一个位置中的关键作用。 10. 动态规划的题目分为两大类,一种是求最优解类,典型问题是背包问题,另一种就是计数...
java lru leetcode :ice_cream: LeetCode Kindem 的个人 LeetCode 题解仓库,欢迎交流学习。 下面的目录中 $number 题号代表经典 LeetCode ...LeetCode ...Jump Game 56 Merge Intervals 64 Minimum Path Sum 73