class Solution {
public:
int jump(vector<int>& nums) {
if (nums.size() == 1) return 0;
int res = 0;
int curDistance = 0;
int nextDistance = 0;
for (int i = 0; i < nums.size(); ++i) {
nextDistance = max(i + nums[i], nextDistance);
if (i == curDistance) {
res++;
curDistance = nextDistance;
if (nextDistance >= nums.size() - 1) break;
}
}
return res;
}
};
代码(二刷自解 2024年3月9日 贪心 8min)
class Solution {
public://贪心
int jump(vector<int>& nums) {
int n = nums.size();
// 遍历 当前位置i ~ 当前位置+nums[i],记录最大 max[i + nums[i]]作为下一个i
int step = 0;
int index = 0;
while (index != n - 1) {
int maxV = INT_MIN;
int nextIndex = index;
for (int i = index; i <= index + nums[index]; ++i) {
if (i == n - 1) return step + 1;
if (maxV < i + nums[i]) {
maxV = i + nums[i];
nextIndex = i;
}
}
index = nextIndex;
step++;
}
return step;
}
};