博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Jump Game II 贪心
阅读量:5949 次
发布时间:2019-06-19

本文共 1631 字,大约阅读时间需要 5 分钟。

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

 

Hide Tags
   
 

 
    这题是前面一题的变种,其实用的是贪心算法,不过数据设置了时间限制,所以需要提交效率,最好就是一次O(n)时间。
    为了提高时间需要做一个思考,如下面位置,是否存在 i-th 需要跳的
最少次数少于i-1 th 位置,如
... i-1 i
... 3 2
  这个可以这么思考,如果i 是从i-1 跳到的,那么i位置的最少跳数 <i> = <i-1> +1.
    如果i 是从i-2  或之前跳到的,那么<i> = <i-1>.
   
可以知道必定有<i>   >=   <i-1>。
    利用这个性质可以加快速度。
算法逻辑:
  1. 创建等长的字符串a,a[i] 表示到i-th  的最少跳数,有a[0]等于0,结果就是a[n-1]。
  2. 创建最大已知位置索引maxIdx,表示在i-th 位置时,已经最远确定的位置索引,初始化为1,即指向未知的位置最小的。
  3. 遍历数组。
  4. 如果遍历位置加上跳跃长度大于等于maxIdx,那么更新数组a 到最大索引maxIdx
  5. 如果maxIdx ==n 跳出
  6. 返回a[n-1].

这样遍历的时间其实只有n 次,时间O(n),空间也是O(n).改进地方就是空间改O(1)。

 

1 #include 
2 using namespace std; 3 4 class Solution { 5 public: 6 int jump(int A[], int n) { 7 int *a = new int [n]; 8 for(int i=1;i
View Code

 

discuss 中有空间O(1)的实现,逻辑是一样的,就贴上来吧。
https://oj.leetcode.com/discuss/422/is-there-better-solution-for-jump-game-ii
1 class Solution { 2 public: 3     int jump(int A[], int n) { 4         int ret = 0; 5         int last = 0; 6         int curr = 0; 7         for (int i = 0; i < n; ++i) { 8             if (i > last) { 9                 last = curr;10                 ++ret;11             }12             curr = max(curr, i+A[i]);13         }14 15         return ret;16     }17 };
View Code

 

 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/Azhu/p/4141896.html

你可能感兴趣的文章
(转)谁是真正的程序语言专家
查看>>
T001 A+B(附常见标准输入输出)
查看>>
Java中abstract class和interface的区别
查看>>
SDWebImage 图片下载缓存框架 常用方法及原理
查看>>
MapReduce分布式缓存程序,无法在Windows下的Eclipse中执行问题解决
查看>>
[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
查看>>
[水]三个数学的小技巧题
查看>>
mysql中查看数据库的版本,什么版本
查看>>
[leetcode-342-Power of Four]
查看>>
MongoDB3.0 创建用户
查看>>
2017-2018-1 20155319 《信息安全系统设计基础》第3周学习总结
查看>>
express 3.0.x 中默认不支持flash() 的解决方法
查看>>
uva-111-dp
查看>>
算法学习1——矩阵转置
查看>>
Tcl与Design Compiler (九)——综合后的形式验证
查看>>
跨页数据传递
查看>>
Linux查看系统负载(CPU和MEM考虑)
查看>>
Codeforces Round #249 (Div. 2) B. Pasha Maximizes
查看>>
MyEclipse 2015 Stable 2.0破解方法
查看>>
【Android游戏开发十一】手把手让你爱上Android sdk自带“9妹”(9patch 工具),让Android游戏开发更方便!...
查看>>