leetcode-45

140 阅读1分钟

题目描述:具体描述见原题。简单来说就是用最少步数从数组初始位置跳到末尾,数组元素代表在该位置可跳跃最大步数。

解题思路:这道题可以采用贪心思路。开始位置位于数组初始位置,假设nums[0]=m,那么需要保证(nums[n]+n)最大,其中n的取值范围是[0,m]。具体过程见代码。

具体代码:

func jump(nums []int) int {
  i, maxI, count, end := 0, 0, 0, len(nums)-1
	for i < end { // 跳到末位之前
		if i+nums[i] >= end {
			return count+1
		}
		next, maxNext := i+1, nums[i]+i
		for next <= maxNext { // 更新maxI,确保maxI为最大值,注意这里的等号,如果忽略等号,可能会在第六个测试用例执行超时。
			if next+nums[next] > maxI {
				maxI, i = next+nums[next], next
			}
			next++
		}
		count++
	}
	return count
}

补充说明:突击了一周。论文终于送一审了hhhhh,一万分感谢瑞瑞、老马和老游,在上周给了我极大的帮助。希望一审顺利。