天工网官方网站,苏州做网站最好公司哪家好,百度关键词推广一年多少钱,青岛做网站和小程序的公司题目
给定一个非负整数数组#xff0c;你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 …题目
给定一个非负整数数组你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置跳 1 步然后跳 3 步到达数组的最后一个位置。 说明: 假设你总是可以到达数组的最后一个位置。
思考
下面看我的思路草图 每次需要更新的参数当前遍历的start、end当前遍历范围中找到的最大的下一步的end。 迭代结束条件end nums.size()-1 按照这个思路很快可以写出来代码
class Solution {
public:int jump(vectorint nums) { int start 0;int end 0;int step 0;//只有end nums.size()-1,才退出whilewhile(end nums.size()-1){//找到当前覆盖范围能到达的最远距离int max_distance 0;for(int i start;i end;i){max_distance max(nums[i]i,max_distance);}//利用最远距离更新end和startstart end 1;end max_distance;//步数加一step 1;}return step;}
};总结
贪心思想每次记录你能够跳到的最远距离 max_distance 下一次寻找的范围从上一次范围的end后面一个开始到最远距离结束。
start end 1;
end max_distance;