/**
* Index: 45
* Title: Jump Game II
* Author: ltree98
**/
题意
给定一组非负整数;
从第一个索引开始向后走,数组索引对应的值代表最多可以走的步数;
求到达最后索引最少要走几次?
我的
思路
贪个心,
我每次要走最远,代表我索引值与索引指向的值和要最大。
再特殊处理一下空值。
时间复杂度: O(n)
空间复杂度: O(1)
实现
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size() <= 1)
return 0;
int ans = 0;
int idx = 0;
while(true) {
int max = -1;
int maxIdx = -1;
int maxStep = nums[idx];
if(idx + maxStep >= nums.size()-1) {
++ans;
break;
}
for(int i = 1; i <= maxStep; i++) {
if(max <= (nums[idx + i] + i)) {
max = nums[idx + i] + i;
maxIdx = idx + i;
}
}
idx = maxIdx;
++ans;
if(idx >= nums.size()-1)
break;
}
return ans;
}
};
进阶
看了看别的方法,有BFS、有DP,但是都不如贪心速度快,就不列了。