洛阳市app网站开发公司电话,seo推广的常见目的有,域名被墙检测,营销网站 app开发题意理解#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。 还是从初始坐标i0的位置到达最后一个元素#xff0c;但是问题不是能不能跳到#xff0c;而是最少几步能跳到最后一个元素。 目标 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。 还是从初始坐标i0的位置到达最后一个元素但是问题不是能不能跳到而是最少几步能跳到最后一个元素。 目标求跳到末尾元素的最小步数。 解题思路 如上面的例子所示 两种方式都能跳到末尾但是最小步数是2. 要用贪心法解题就要明确什么是局部最优什么是全局最优。 这道题里全局最优到达末尾元素步数尽可能小则要求每步尽可能大一些。 所以局部最优为使当前步尽可能的跳到较远的位置上。 我们使用两个量cur表达当前能到达的最远距离next表达下一步能到达的最远距离。 我们在这个cur范围内挑选第二步让两步尽可能达到尽可能远的位置。 1.贪心解题
我们用count来记录步数cur来记录当前可达的最远位置,next表达下一步能到达的最远位置。
若再探索一步就覆盖到末尾元素则count1,结束
若再探索最远一步仍就到不了末尾元素则count,探索下下一步的最远位置。
class Solution {public int jump(int[] nums) {if(nums.length1) return 0;//只有一个末尾元素不用走也能到int count0;int cur0;int next0;for(int i0;inums.length;i){nextMath.max(next,inums[i]);//当前步探索位置到达边界if(nextnums.length-1){count;break;}if(icur){count;curnext;}}return count;}
} 2.分析 时间复杂度O(n) 空间复杂度O(n) n为输入数组的长度。