最近比较忙,最近两周都没怎么刷题,趁着周末,小刷两道怡下情哈哈
自己解法
这题因为还有印象,就是贪婪算法,去算当前点跳跃能覆盖的范围,在这个范围找到一个能跳最远的点进行跳跃,以此类推就搞定了。
class Solution {
public int jump(int[] nums) {
if (nums.length == 1) {
return 0;
}
int index = 0;
int maxPos = nums[0];
int count = 1;
while (maxPos < nums.length - 1) {
int m = maxPos;
for (int j = index + 1; j <= m; j++) {
if (nums[j] + j > maxPos) {
index = j;
maxPos = nums[j] + j;
}
}
count++;
}
return count;
}
}
官方解法
这题因为在公交上看过,印象深刻,佩服一下自己的记忆力哈哈,所以思路是一样的,只是官方写法更整齐,更统一。
class Solution {
public int jump(int[] nums) {
int length = nums.length;
int end = 0;
int maxPosition = 0;
int steps = 0;
for (int i = 0; i < length - 1; i++) {
maxPosition = Math.max(maxPosition, i + nums[i]);
if (i == end) {
end = maxPosition;
steps++;
}
}
return steps;
}
}
网友评论