题目:

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.)

思路:

第一种思路是利用迭代的思路来计算最小跳数,但是时间复杂度比较大;第二种思路是反过来想,要达到最后一条,倒数第二条至少应该到哪个位置,以此类推直到我们倒推到第一位时便可知最小跳数;第三种思路是用动态规划DP的观点来实现。DP[i]代表到达i的最小跳数,显然DP是一个递增的数组。每次循环只需要尽量找到最小的DP[k],使其满足k+A[k]>=n。

 

代码:

思路一:迭代(时间复杂度不满足要求)

  1. class Solution {
  2. public:
  3. int jump(int A[], int n) {
  4. // Start typing your C/C++ solution below
  5. // DO NOT write int main() function
  6. int* v = new int[1];
  7. v[0] = INT_MAX;
  8. jumpRepeat(A, 0, n-1, 0, v);
  9. if(v[0] == INT_MAX)
  10. {
  11. return 0;
  12. }
  13. return v[0];
  14. }
  15. void jumpRepeat(int A[], int i, int m, int n,int* v)
  16. {
  17. if(i >= m)
  18. {
  19. if(v[0] > n)
  20. {
  21. v[0] = n;
  22. }
  23. return;
  24. }
  25. if(A[i] == 0)
  26. {
  27. return;
  28. }
  29. else
  30. {
  31. for(int j = 1; j <= A[i]; j++)
  32. {
  33. jumpRepeat(A, i + j, m, n+1, v);
  34. }
  35. }
  36. }
  37. };
 
 
思路二:倒推
  1. class Solution {
  2. public:
  3. int jump(int A[], int n) {
  4. // Start typing your C/C++ solution below
  5. // DO NOT write int main() function
  6. int pre = 0;
  7. int cur = n - 1;
  8. int count = 0;
  9. while(true)
  10. {
  11. if(pre == cur)
  12. {
  13. return 0;
  14. }
  15. count++;
  16. pre = cur;
  17. for(int i = n - 2; i >= 0; i--)
  18. {
  19. if(i + A[i] >= pre)
  20. {
  21. if(cur > i)
  22. {
  23. cur = i;
  24. }
  25. }
  26. }
  27. if(cur == 0)
  28. {
  29. return count;
  30. }
  31. };
  32. }
  33. };

思路三:动态规划

  1. class Solution {
  2. public:
  3. int* dp;
  4. int jump(int A[], int n) {
  5. if(n==0)
  6. {
  7. return INT_MAX;
  8. }
  9. dp = new int[n];
  10. dp[0] = 0;
  11. for(int i=1;i<n;i++)
  12. {
  13. dp[i] = INT_MAX;
  14. }
  15. for(int i=1;i<n;i++)
  16. {
  17. for(int j=0;j<i;j++)
  18. {
  19. if(j+A[j]>=i)
  20. {
  21. int tmp = dp[j]+1;
  22. if(tmp < dp[i])
  23. {
  24. dp[i] = tmp;
  25. break;
  26. }
  27. }
  28. }
  29. }
  30. return dp[n-1];
  31. }
  32. };

【To Read】LeetCode | Jump Game II(转载)的更多相关文章

  1. LeetCode: Jump Game II 解题报告

    Jump Game II Given an array of non-negative integers, you are initially positioned at the first inde ...

  2. [LeetCode] Jump Game II 跳跃游戏之二

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  3. LeetCode——Jump Game II

    Description: Given an array of non-negative integers, you are initially positioned at the first inde ...

  4. [LeetCode] Jump Game II 贪心

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  5. Leetcode jump Game II

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  6. [LeetCode] Jump Game II(贪婪算法)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. leetcode–jump game II

    1.题目描述 Given an array of non-negative integers, you are initially positioned at the first index of t ...

  8. leetcode Jump Game II python

    @link http://www.cnblogs.com/zuoyuan/p/3781953.htmlGiven an array of non-negative integers, you are ...

  9. [Leetcode] jump game ii 跳跃游戏

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

随机推荐

  1. KOA 学习(九)koa-static

    配置静态资源的中间件 const Koa = require('koa'); const app = new Koa(); app.use(require('koa-static')(root, op ...

  2. Hadoop IO 特性详解(2)【文件校验】

    (本文引用了microheart,ggjucheng的一些资料,在此感谢.charles觉得知识无价,开源共享无价) 这一次我们接着分析文件IO校验的相关代码,看看最底层是如何实现这种大数据集的文件校 ...

  3. phpSpider 单页测试_模拟登陆

    <?php require './vendor/autoload.php'; use phpspider\core\phpspider; use phpspider\core\requests; ...

  4. Python 原生2种 邮件发送(发送验证码) 的方法

    import smtplib from email.mime.text import MIMEText # 第三方 SMTP 服务 mail_host = "smtp.sina.cn&quo ...

  5. 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

      通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...

  6. HDU3486 RMQ

    /*多么变态的一道题,交了18次*/ #include<cstdio> #include<cstring> #include<cmath> #define max( ...

  7. HTML连载58-绝对定位的参考点以及注意事项

    一.绝对定位参考点 1.规律: (1)默认情况下所有的绝对定位的元素,无论有没有祖先元素,都会以body作为参考点. <style> .box1{ width: 300px; height ...

  8. python twisted 的定时调用带参的函数

    无参情况:lc = task.LoopingCall(fun)如果fun带有参数,可以使用functools.partial传递 (fun2 = partial(fun, param1,[...]) ...

  9. ubuntu 已安装 post-installation 脚本 返回错误状态 1

    1.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名 2.$ sudo mkdir /var/lib/dpkg/inf ...

  10. ckfinder图片上传成功,但无法打开This image failed to load.

    原因是basedir和baseurl的问题 本地调试的时候 可以用 这种方式实现,但是部署到线上,就有问题