关闭

leetcode 45:Jump Game II

标签: 算法面试leetcode
273人阅读 评论(0) 收藏 举报
分类:

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

不知道这算是贪心还是动态规划,应该是贪心吧
//参考 https://github.com/soulmachine/leetcode
int max(int a , int b){
    return a > b ? a : b ;
}

int jump(int* nums, int numsSize) {
    int maxReach=0;//站在[0,i]区间里面跳一步可以到达的最远距离
    int curReach=0;//目前跳ret步,可以到达的长度
    int ret=0;
	for (int i = 0; i < numsSize; i++)
	{
		if(curReach=numsSize-1)
            return ret;
	}
	return 0;
}

// LeetCode, Jump Game II
// 时间复杂度O(n),空间复杂度O(1)
class Solution {
public:
    int jump(int A[], int n) {
        int step = 0; // 最小步数
        int left = 0;
        int right = 0; // [left, right] 是当前能覆盖的区间
        if (n == 1) return 0;
        while (left <= right) { // 尝试从每一层跳最远
            ++step;//在[left, right]区间 跳一步
            const int old_right = right;
            // 跳着一步最大可能跳到的区间
            for (int i = left; i <= old_right; ++i) {
                int new_right = i + A[i];
                if (new_right >= n - 1) return step;
                if (new_right > right) right = new_right;
            }
            left = old_right + 1;
        }
        return 0;
    }
};
动态规划这个会超时,注意 :memeset 是以字节为单位赋值,而代码中用的是int 类型 4个字节
// 动态规划
int jump(int* nums, int numsSize) {
    int *pStepFlags = (int *)malloc(numsSize*sizeof(int)); // 到 i 最少跳多少步
	pStepFlags[0] = 0;
	memset(pStepFlags + 1, 0x7f, (numsSize - 1)*sizeof(int));

	for (int i = 1; i= i &&  StepCount < pStepFlags[i])
			{
				pStepFlags[i] = StepCount;
				break;// 不要再循环了,前面的一定比后面的步数少!!!!Each element in the array represents your maximum jump length at that position,因为每个序列表示最大可以跳的距离,可以少跳
			}
		}
	}
	return pStepFlags[numsSize - 1];
}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Leetcode 454. 4Sum II 四数之和2 解题报告

1 解题思想首先,这是一道远古之前的题的进化版: Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想 但是我不想说那个题了,因为我也记不住了。。这道题意思就是ABCD四个数组,长...
  • MebiuW
  • MebiuW
  • 2016-11-16 22:45
  • 2765

【LeetCode-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...
  • DERRANTCM
  • DERRANTCM
  • 2015-08-12 06:23
  • 2491

Jump Game II 跳跃游戏(求跳到最后一个的最小步数) @LeetCode

第一次遇到用DP还超时的问题!既然DP都超时,那么只能再一次用greedy了。 package Level4; import java.util.Arrays; /** * Jump Ga...
  • hellobinfeng
  • hellobinfeng
  • 2013-11-08 09:37
  • 2512

LeetCode No.45 Jump Game II

LeetCode No.45 Jump Game II
  • woshihuangjianwei
  • woshihuangjianwei
  • 2016-11-02 20:24
  • 122

Leetcode45. Jump Game II

Leetcode45. Jump Game II
  • Earl211
  • Earl211
  • 2017-06-29 10:47
  • 177

[leetcode] 45.Jump Game II

问题描述: Given an array of non-negative integers, you are initially positioned at the first index of t...
  • u014673347
  • u014673347
  • 2015-04-28 17:13
  • 299

LeetCode 55/45 Jump Game I/II-----Greedy**

一:Jump Game 题目: Given an array of non-negative integers, you are initially positioned at the first ...
  • Lu597203933
  • Lu597203933
  • 2015-04-10 12:30
  • 984

LeetCode hard 45. Jump Game II

这道题虽然在难度上是hard,但是想要做出来还是挺容易的,可能是我投机取巧了?它的tag写的是greedy,但是我用的是动态规划,不知道算不算是违规了。 ----------------------...
  • Ardenso
  • Ardenso
  • 2017-06-18 09:51
  • 147

LeetCode: 45. Jump Game II

LeetCode: 45. Jump Game II
  • yanglingwell
  • yanglingwell
  • 2017-04-01 12:31
  • 625

leetCode 45.Jump Game II (跳跃游戏) 解题思路和方法

Jump Game II Given an array of non-negative integers, you are initially positioned at the first i...
  • xygy8860
  • xygy8860
  • 2015-07-12 12:35
  • 887
    个人资料
    • 访问:151354次
    • 积分:3151
    • 等级:
    • 排名:第12651名
    • 原创:154篇
    • 转载:115篇
    • 译文:0篇
    • 评论:3条
    最新评论