Sub problem: s[i] = max(s[i-1], s[i] + i)(我能到达i必然能到达i-1,所以子结构可满足)。
细节:直接从头把nums数组改成s数组即可,省一点空间。
代码
class Solution {
public:
int jump(vector<int>& nums) {
int size = nums.size();
for(int i = 1; i < size; i++){
nums[i] = max(nums[i - 1], nums[i] + i);
//modify nums[i] -> maximum distance we can reach in one step from index i
}
int ans = 0;
for(int i = 0; i < size - 1; i = nums[i]){
ans++;
}
return ans;
}
};