leetcode算法练习【45】跳跃游戏 II

所有题目源代码:Git地址

题目

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

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

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

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

方案:贪心算法

  • 重点是if (nums[j + i]+j+i >=nums[max]+max) max = i + j;这句,比谁能跳的远,而不是比谁位置上的元素大
class Solution {
    public int jump(int[] nums) {
        int max = 0;
        int len = nums.length;
        if(len<=1) return 0;
        int time=0;
        for(int i = 0;i<len;i++){
            if(nums[i]+i>=len-1) return time+1;
            max = i+1;
            for(int j = 1;j<=nums[i];j++){
                if (nums[j + i]+j+i >=nums[max]+max) max = i + j;
            }
            i=max-1;
            time ++;
        }
        return time+1;
    }
}

复杂度计算

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
原创文章 179 获赞 270 访问量 34万+

猜你喜欢

转载自blog.csdn.net/symuamua/article/details/106118418