No.45《跳跃游戏 II》;题型:贪心、数组
题目
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
说明:
假设你总是可以到达数组的最后一个位置。
题解思路(动态规划)
具体思路:
- 维护当前能够到达的最大下标位置,记为边界
end
; - 从左到右遍历数组,到达边界时,更新边界并将跳跃次数增加 1;
题解代码
class Solution {
public:
int jump(vector<int>& nums) {
int maxPos=0; //当前可达最远下标(临时)
int end=0; //当前可达最远下标
int step=0; //到达最远边界(end)所需的最少步数
int n=nums.size();
for(int i=0;i<n-1;i++){
if(maxPos>=i){ //只统计最远边界内的元素
maxPos=max(maxPos,i+nums[i]); //若有能达更远位置的,更新maxPos
if(i==end){
end=maxPos;
step++;
}
}
}
return step;
}
};
时间复杂度:O(n)
空间复杂度:O(1)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。