55. Jump Game
来源:互联网 发布:新版淘宝联盟 编辑:程序博客网 时间:2024/06/06 08:54
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.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
题意为给定一个非负数组成的序列,其中序列中的每个数表示可以跳跃的位移。假如遍历每个序列,取每次的和或者当前序列的值的最大值,假如能达到大于或者等于数组最后一个下标,那么就表示可以跳到数组末尾,这就是贪心法,代码如下:
Code(LeetCode运行13ms):
class Solution {public: bool canJump(vector<int>& nums) { int index = 1; for (int i = 0; index < nums.size() && i < index; i++) { index = max(index, i + nums[i] + 1); } return index >= nums.size(); }};
Code(LeetCode运行16ms)
bool canJump(vector<int>& nums) { int index = nums.size() - 1; for (int i = nums.size() - 2; i >= 0; i--) { if (i + nums[i] >= index) { index = i; } } return index == 0; }
或者用动态规划也可以做,但是要花费O(n)的空间去保存状态,但是也可以只用两个int变量来保存上一个状态和当前状态。其中状态转移方程为:
f[n] = max (f[n -1], nums[n - 1])
所以代码如下。
Code(LeetCode运行12ms)
bool canJump(vector<int>& nums) { int f1 = 0, f2 = 0; for (int i = 1; i < nums.size(); i++) { f2 = max(f1, nums[i - 1]) - 1; if (f2 < 0) { return false; } f1 = f2; } return f2 >= 0; }
以上代码的时间复杂度都为O(n),空间复杂度为O(1)。
阅读全文
0 0
- 55. Jump Game && 45. Jump Game II
- 55. Jump Game. 45. Jump Game II
- [LeetCode]55.Jump Game
- LeetCode 55.Jump Game
- LeetCode --- 55. Jump Game
- [Leetcode] 55. Jump Game
- [leetcode] 55.Jump Game
- 55. Jump Game
- 55. Jump Game
- [leetcode] 55.Jump Game
- *LeetCode 55. Jump Game
- LeetCode 55. Jump Game
- [leetcode] 55. Jump Game
- 55. Jump Game
- leetcode 55. Jump Game
- 55. Jump Game LeetCode
- 【LeetCode】55. Jump Game
- 55. Jump Game
- fresco图片加载
- 【算法】计数排序以及其java实现
- bootstrap表格如何固定宽度或者自适应内容的宽度
- OkHttp3Util
- Linux执行结果不输出到终端
- 55. Jump Game
- 上下文菜单及选项菜单
- /etc/resolvconf/resolv.conf.d/base
- 第14周项目1-1
- leetcode 7 Reverse Integer
- 高仿淘宝 二级列表固定数据 购物车
- System76:全面支持Linux笔记本/台式电脑的HiDPI显示
- 牛批的strcpy和strcmp
- JavaSE练习