贪心:
每次都在可跳跃的范围内寻找下一个最远的跳跃点,最远的跳跃点就是可跳跃范围内,当前位置加上当前位置的值的最大值:max_pos = max(i + nums[i], max_pos)
C++
class Solution {
public:
int jump(vector<int>& nums) {
int len = nums.size();
int cnt = 0;
int end = 0;
int max_pos = 0;
for (int i = 0; i < len - 1; ++i) {
max_pos = max(max_pos, i + nums[i]);
if (i == end) {
end = max_pos;
++cnt;
}
}
return cnt;
}
};
Go
func jump(nums []int) int {
var end int = 0
var max_pos int = 0
var len int = len(nums)
var cnt int = 0
for i := 0; i < len - 1; i++ {
max_pos = int(math.Max(float64(nums[i] + i), float64(max_pos)))
if i == end {
end = max_pos
cnt++
}
}
return cnt
}