注意:leetcode题中明确说了一定能到达最后一个位置,但vivo没有这个说明,所以要进行判定。
20vivo原题
思路:贪心算法(顺藤摸瓜)
class Solution {
public:
int jump(vector<int>& nums) {
if (nums.size() <= 1) return 0;
int step = 0, start = 0, reach = 0;
while (reach < nums.size() - 1) {
int farest = 0;
for (int i = start; i <= reach; ++i)
{
if (farest < i + nums[i])
{
farest = i + nums[i];
start = i + 1;
}
}
reach = farest;
step++;
}
return step;
}
};
vivo的题的代码:
int solution(int a[], int N)
{
if (N < 1)
return -1;
if (N == 1)
return 0;
int start = 0;
int reach = 0;
int step = 0;
while (reach < N - 1) {
++step;
int farest = 0;
for (int i = start; i <= reach; ++i) {
if (i + a[i] > farest) {
farest = i + a[i];
start = i + 1;
}
}
if (farest == reach) return -1;
reach = farest;
}
return step;
}