leet刷题小菜鸡-45.跳跃游戏||

题目描述:

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例

输入:[2, 3, 1, 1, 4]

输出:2

贪心,注意贪心的值是下一次能跳到最远。

解释如下:

假设现在处于i处,第i处的值为nums[i],则下一个可能在的位置为[i+1, i+nums[i]]。所以现在面临的问题是,如何选取下一跳的位置?这里我们使用贪心的思想,选取能使下一跳获得最远距离那个位置。结合示例,比如目前处于第0位,nums[0]为2,所以下一跳的范围是[1, 2],我们要做的是从这个范围[1, 2]中选择nums[j]最大的那个位置作为下一步的位置。

代码如下(C++)

class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size() == 1)
            return 0;
        int count = 0;

        for(int i = 0; i + nums[i] < nums.size()-1;) {
            int maxPos = i+1;
            //找出下一跳位置,即从[i+1, i + nums[i]]中选取位置+nums[位置]最大                                                  //的那个数的位置
            for(int j = 1; j<= nums[i];j++) {   
                if(nums[maxPos] + maxPos <= nums[j+i] + j + i) {
                    maxPos = j+i;
                }
            }
            i = maxPos;                           //下一跳位置
            count += 1;    
        }
        return count+1;
    }
};

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(leetcode)