Jump Game II
来源:互联网 发布:数据库实例是什么 编辑:程序博客网 时间:2024/06/04 23:28
来源于九章题解,这是一个伪贪心算法,因为看的其他dp解法,现在leetcode已无法通过,遂只写伪贪心。
不同于dp用数组来存每个位置的最小步数,伪贪心是直接遍历循环,每一个大循环,即为一步,最小步数,一定可以保证,最早跳出,即jumps一定是最小的。
如何做到呢?
因为最大的步数可能出现在一个次大的步数之后,如:1,4,1,2,10,1,1,1,2,1,1,1
那么就需要在大的循环之后构造一个新的区域,即在次大步数的可达范围内,是否还存在一个更大的步数到一个更大范围,如上,在A[1] = 4到A[5]范围内,还存在一个A[4] = 10的更大步数可以到达一个更大范围。
这个新的区域由每次所找到的最大步数可达的最大范围来界定。
public int jump(int[] A) {
if (A == null || A.length == 0) {return 0;
}
int start = 0, end = 0;
int jumps = 0;
while (end < A.length - 1) {
jumps++;
// 上一次的结束位置是最大范围
int maxIndex = end;for (int i = start; i <= end; i++) {
// 看在当前范围内,是否存在一个更大的步数到一个更大范围
if (A[i] + i >= maxIndex) {maxIndex = A[i] + i;
}
}
// 已经对上一次的范围进行了全搜索,找到了当中的可能最大步数,所以开始位置可以是范围+1,
start = end + 1;
// 这是最大可达的范围,即为下一次搜索截止,看看当中是否还存在一个更大的可达范围
end = maxIndex;}
return jumps;
}
0 0
- Jump Game &Jump Game II
- Jump Game/Jump Game II
- LeetCode: Jump Game II
- LeetCode Jump Game II
- LeetCode: Jump Game II
- [Leetcode] Jump Game II
- [LeetCode] Jump Game II
- [Leetcode] Jump Game ii
- leetcode Jump Game II
- Jump Game II
- Jump Game II
- Jump Game II
- leetcode Jump Game II
- [LeetCode]Jump Game II
- Jump Game II
- Jump Game II
- Jump Game II
- Jump Game II
- mongoDB的基础使用
- Ubuntu 下安装 Android Studio
- 阿里云服务器yum源更新问题
- RxJava运用技巧-RxAndroid部分源码解读
- 安装 caseprjs 和 phantomjs
- Jump Game II
- [SCU 4511] 任务 (状态优化DP)
- DirectX 在VS2012及以上版本的配置
- HDU 2476 String painter(区间dp)
- 爬虫介绍02:爬取第一个站点
- [leetcode] 350. Intersection of Two Arrays II 解题报告
- Android案例
- Android动画-Drawable Animation
- Scala设计模式Part I. 创建模式——1.抽象工厂