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.
Your goal is to reach the last index in the minimum number of jumps.
For example:
Given array A = [2,3,1,1,4]
The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)
Each element in the array represents your maximum jump length at that position.
Your goal is to reach the last index in the minimum number of jumps.
For example:
Given array A = [2,3,1,1,4]
The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)
看题中的意思貌似是不会出现0元素,因此总是可以走到头的,就暂不考虑这样的边界了。拿到这倒题的第一思路是从后往前DP,我们用step[i]表示第i个元素到终点的最小跳数,则
step[ i ] = 0;(i == A.length - 1)
step[ i ] = min{ step[ j ] : i < j <= min(i+ A[ j ],A.length -1) } + 1
因此不难写出这样的代码
public int jump(int[] A) { int length = A.length; int[] step = new int[length]; step[length - 1] = 0; for(int i = length - 2; i >= 0 ; i--){ int min = Integer.MAX_VALUE; for(int j = i + 1; j < length && j <= i + A[i]; j++){ if(step[j] < min){ min = step[j]; } } step[i] = min + 1; } return step[0]; }
时间复杂度自然是O(N*N) 面对这样的case:
[25000,24999,24998,24997,24996,24995....5,4,3,2,1]对每一个元素都要重复计算前面的所有元素,超时是自然的。
花费了一个半小时才AC,囧!由于本题并没有要求我们计算出跳跃路径,因此我们可以单纯的求跳数, 采取贪心的算法,比如2,3,4,1,0,5对于2,其覆盖范围是3,4,,因此我们只需要求3,4,的最大覆盖范围即可,既然在4的覆盖范围中求下一跳的最大覆盖范围。每一次更新覆盖范围,就说明要进行一跳。代码如下:
public int jump(int[] A) { int step = 0; int cover = A[0]; for (int i = 1; i < A.length; ) { int max = cover; while (i <= cover && i < A.length) { if (A[i] + i > max) { max = A[i] + i; } i++; } cover = max; step++; } return step; }
我去。。看了别人的算法,竟然发现惊人的相似o(╯□╰)o。。。。。
相关推荐
《使用leetcode-editor在IDE中进行LeetCode练习的全方位指南》 LeetCode是一个广受欢迎的在线编程练习平台,它提供了一系列的算法题目供程序员们提升技能。对于习惯在集成开发环境(IDE)中工作的开发者来说,将...
《Python版LeetCode题解全集详解》 LeetCode是一个广受欢迎的在线编程挑战平台,致力于帮助程序员提升技能,特别是面试准备。这个压缩包“lc-all-solutions-master”包含了使用Python语言解决LeetCode所有问题的...
"IDEA leetcode-editor插件"就是将这两者结合的工具,允许用户在IDEA中直接进行LeetCode的编程挑战,无需离开开发环境,提高了刷题的便捷性。 该插件的主要功能包括: 1. **离线模式**:在无法访问LeetCode官网的...
vs code LeetCode 插件
terminal-leetcode, 终端Leetcode是基于终端的Leetcode网站查看器 终端 leetcode终端leetcode是基于终端的leetcode网站查看器。本项目是由 RTV 激发的。 我最近正在学习本地化的反应,以实践我的新知识,并根据这个...
基于Python实现的LeetCode爬虫爬取LeetCode题目描述和提交的代码.zip ## 特点 - 支持爬取题目列表,保存为本地CSV/Excel文件。 - 支持爬取题目描述,保存为本地HTML文件。 - 支持爬取用户提交的代码,保存为如_.py...
(C++)LeetCode刷题题解答案
leetcode刷题, 直接用leetcode的分类方式.
力扣(LeetCode) 相比其他编程平台有着很多优势: **各大知名公司面试真题:**对于求职者在这上面训练更具有针对性,目前国内一些公司面试时直接从在这上面出题。 **大中小企业都在使用:**常常会直接或者间接...
LeetCode-Swift, 快速LeetCode解决方案 LeetCodeLeetCode在线判断是一个包含很多收费算法的网站。 them Google Google Google Google LinkedIn this this repo 。 请免费参考并收费STAR以支持这个 repo,
LeetCode面试笔试题
《LeetCode Editor 7.4:提升编程技能的利器》 在编程学习和实践中,LeetCode 已经成为了程序员们磨炼算法、提升编程技能的重要平台。为了方便开发者更高效地进行刷题,LeetCode 提供了官方编辑器插件——LeetCode ...
### LeetCode中文版知识点概述 #### 一、LeetCode简介与使用 LeetCode是一个全球知名的在线编程学习平台,主要提供各种算法题目供开发者练习。它不仅涵盖了基础数据结构和算法训练,还包括了大量的面试真题,是...
算法 Leetcode刷题手册 labuladong的算法小抄官方完整版
LeetCode 400题目 Java版本 (LeetCode is the platform to help you enhance your skills, expand your knowledge and prepare for technical interviews.)
leetcode题解代码,先使用C++解题,后续学习其它语言也使用leetcode来快速学习.leetcode题解代码,先使用C++解题,后续学习其它语言也使用leetcode来快速学习.leetcode题解代码,先使用C++解题,后续学习其它语言也...
leetcode 习题集, leetcode 官网出品,包含基本的算法
leetcode算法。本书包含了 LeetCode Online Judge(http://leetcode.com/onlinejudge) 所有题目的答案,所有 代码经过精心编写,编码规范良好,适合读者反复揣摩,模仿,甚至在纸上默写。 全书的代码,使用 C++ 11 的...