
做此题必须先会55跳跃游戏1,这个题目是纯粹的升级版。
此题虽然是升级版,但是和1的思路差的还挺多。
每次到最远距离mx之前,我们会记录一个his_mx,在到达最远的mx之前,缓存可能能达到的最远距离his_mx,真的到达后再更新mx,并且ans++。这个挺难想的,下次见到结合大模型和代码再想想。
cpp
class Solution {
public:
int jump(vector<int>& nums) {
int mx = 0, his_mx = 0, ans = 0;
int n = nums.size();
if(n <= 1)return 0;
for(int i=0;i<n;i++)
{
int tmp = i + nums[i];
if(tmp > his_mx)his_mx = tmp;
if(his_mx >= n-1)return ans+1;
if(i == mx)
{
ans++;
mx = his_mx;
}
}
return ans;
}
};