码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]Jump GameII

时间:2017-04-24 12:35:20      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:while   长度   i++   ++   else   bsp   思路   jump game   结束   

题目:Jump GameII

如果要求找最小的调数,考虑扩张的思路。

思路如下:

1.首先找起始位能到达的范围是否覆盖了最终位置,并记录下搜索中的最远能到达的位置值,即max{nums[i] + i};

2.如果无法到达最终位置,则跳数加一,并从上一次搜索的最后位置开始,向后搜索到上一次记录的最大值所在的位置。

3.重复上面两步,直到找到最终跳数。

注意:

当数组元素只有1个时,跳数是0;

跳数的初值应该是1。

int jump(vector<int>& nums){
    if (nums.size() < 2)return 0;//数组长度小于2
    int start = 0, next = nums.at(0),end = nums.size() - 1;
    int jump = 1,cur = next;//jump记录跳数,cur记录当前的最大范围
    while (cur < end){
        jump++;
        for (int i = start + 1; i <= next; i++)
        {
            if (nums.at(i) + i >= end)return jump;
            else if (nums.at(i) + i > cur)cur = nums.at(i) + i;
        }
        start = next;//start是搜索的开始位置
        next = cur;//next是搜索的结束位置
    }
    return jump;
}

 

[LeetCode]Jump GameII

标签:while   长度   i++   ++   else   bsp   思路   jump game   结束   

原文地址:http://www.cnblogs.com/yeqluofwupheng/p/6755622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!