目录
题目描述:
题解思想:
算法的核心思想是在遍历数组的过程中,不断更新当前能够到达的最远索引位置 max_far
,同时判断是否需要进行跳跃。当当前索引 i
达到上一步所能够到达的最远位置 end
时,说明需要进行下一次跳跃,此时更新 end
为当前能够到达的最远索引位置 max_far
,并将步数 step
加一。
代码:
class Solution {
public:
int jump(vector<int>& nums) {
int max_far = 0; // 当前能够到达的最远索引位置
int step = 0; // 跳跃的步数
int end = 0; // 当前步数内能够到达的最远索引位置
for(int i = 0; i < nums.size() - 1; i++) {
max_far = std::max(max_far, i + nums[i]); // 更新当前能够到达的最远索引位置
if(i == end) {
end = max_far; // 更新当前步数内能够到达的最远索引位置
step++; // 步数加一,因为需要进行一次跳跃
}
}
return step; // 返回跳跃的总步数
}
};
总结:
这个算法通过贪心策略选择每次跳跃时能够到达的最远位置,从而在遍历数组的过程中不断更新步数,最终得到跳到最后一个元素所需的最小步数。