leetcode -- Jump Game-- 重点--Greedy
2015-12-15 00:10
274 查看
https://leetcode.com/problems/jump-game/
这是个典型的贪心问题,为了check是否可以走到最后一格,我们需要check第一格能否走到第二格,第二格能否走到第三格,。。。。, 直到check到倒数第一格能够走到最后一格,只要中途有unreachable的,那么就False,否则就True。
我们需要记录从第一个数组格子到当前数组格子,所能reach到的最大的index,记为max_reach_index 注意不仅仅只考虑当前数组格子 index + A[index]作为这个所能reach的最大的index,要考虑当前数组格子以前的所有格子中所能reach到的最大index。
例如: [2, 1000000, 5, 6], 当index到2时,max_reach_index = 1000001
给定一个数组,判断从首位置能否到达最后一个位置。这个问题我们可以反过来看,如果从第n-1个位置能够到达第n个位置,那么我们就可以判断前面n-2个位置能否到达第n-1个位置,以此类推,如果最后能反推到第一个位置则说明可以,否则不行
思路1
ref: http://blog.csdn.net/hyperbolechi/article/details/44033241这是个典型的贪心问题,为了check是否可以走到最后一格,我们需要check第一格能否走到第二格,第二格能否走到第三格,。。。。, 直到check到倒数第一格能够走到最后一格,只要中途有unreachable的,那么就False,否则就True。
我们需要记录从第一个数组格子到当前数组格子,所能reach到的最大的index,记为max_reach_index 注意不仅仅只考虑当前数组格子 index + A[index]作为这个所能reach的最大的index,要考虑当前数组格子以前的所有格子中所能reach到的最大index。
例如: [2, 1000000, 5, 6], 当index到2时,max_reach_index = 1000001
class Solution(object): def canJump(self, nums): """ :type nums: List[int] :rtype: bool """ if len(nums) <=1: return True max_reach_index = nums[0] for index in xrange(1, len(nums)):#注意这里是从1开始 if max_reach_index >= index:# it can reach to the next position max_reach_index = max(max_reach_index, nums[index] + index) else: return False return True
思路2
ref2: https://www.zybuluo.com/chanvee/note/58731给定一个数组,判断从首位置能否到达最后一个位置。这个问题我们可以反过来看,如果从第n-1个位置能够到达第n个位置,那么我们就可以判断前面n-2个位置能否到达第n-1个位置,以此类推,如果最后能反推到第一个位置则说明可以,否则不行
class Solution(object): def canJump(self, nums): """ :type nums: List[int] :rtype: bool """ index = len(nums) - 1 for i in reversed(range(len(nums)-1)): if i + nums[i] >= index: index = i #这里不能在 <index的时候,就break,因为即便第n-1个位置不能reach到第n个位置,那么第n-2, n-3...这之前的jump可能很大,可以直接跨到第n个位置,即index所在的位置。所以只要最后index能够到0,那么就是true,否则就是false return not index
相关文章推荐
- [Vim]
- iOS开发之App启动原理
- 普法知识(35):关于法律“公示”的重要作用
- Drools 入门例子
- 2015年最新App Store审核被拒的理由
- Struts2的action之间的交互
- java 路径的困扰
- BZOJ4289 : PA2012 Tax
- IntelliJ IDEA Jrebel 热部署
- 打造高效率产品测试体系(2天精品班,中国深圳 2016.1.15~16)
- SVN中Create(Apply)patch创建及应用补丁
- SO_REUSEADDR SO_REUSEPORT 解析
- 欢迎使用CSDN-markdown编辑器
- theano GPU install
- AndroidStudio引入.so库
- screen 命令示例:管理多个终端会话
- mysql 触发器应用《mysql 5.6从零开始学》
- 书评:《算法之美( Algorithms to Live By )》
- JSP自定义标签入门学习
- PHP工程师VIM配置分享