先用数组记录每一个位置能够跳到的最大的位置,然后从0开始遍历,每一次都选择可以调到最远位置的那个位置作为下一个位置,直到到达终点为止。
class Solution {
public:
int jump(vector<int>& nums) {
int i, temp_i, n = nums.size(), * state = new int[n], max, sum = 0;
if(n <= 1)
{
return 0;
}
// 记录每一个位置可以到达的最后一个位置
for(i = 0; i < n; ++i)
{
if(i + nums[i] >= n)
{
state[i] = n - 1;
}
else
{
state[i] = i + nums[i];
}
}
// 通过遍历,找到当前所能到达的大的位置,并且更新坐标
for(i = 0; i < n - 1;)
{
temp_i = state[i];
max = state[temp_i];
for(int j = i + 1; j < state[i]; ++j)
{
if(state[j] > max)
{
temp_i = j;
max = state[j];
}
}
i = temp_i;
++sum;
}
return sum;
}
};