給定一個非負整數數組,你最初位於數組的第一個位置。
數組中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達數組的最後一個位置。
示例:
輸入: [2,3,1,1,4] 輸出: 2 解釋: 跳到最後一個位置的最小跳躍數是2
。 從下標爲 0 跳到下標爲 1 的位置,跳1
步,然後跳3
步到達數組的最後一個位置。
說明:
假設你總是可以到達數組的最後一個位置。
思路:維護每個點能到的最大值的數組,求出這個數組的最大值數組,然後模擬即可
class Solution {
public:
int jump(vector<int>& nums) {
vector<int>ans(nums.begin(),nums.end()),maxx(nums.size());
for(int i=0;i<nums.size();i++)
{
ans[i]+=i;
if(i>=1)maxx[i]=max(maxx[i-1],ans[i]);
else maxx[i]=ans[i];
}
int cnt=0;
for(int i=0;i<nums.size()-1;)
{
cnt++;
i=maxx[i];
}
return cnt;
}
};