45. 跳跃游戏 II

image.png

贪心

  1. package main
  2. import (
  3. "fmt"
  4. "math"
  5. )
  6. func jump(nums []int) int {
  7. //记录能够到达的最远距离
  8. maxPosition :=0
  9. steps :=0
  10. //记录上一步 step 跳的最远距离也就是边界
  11. end :=0
  12. // //这里有个小细节,因为是起跳的时候就 + 1 了,如果最后一次跳跃刚好到达了最后一个位置,那么遍历到最后一个位置的时候就会再次起跳,这是不允许的,因此不能遍历最后一个位置
  13. for i:=0;i<len(nums)-1;i++{
  14. //更新最大距离
  15. maxPosition = int(math.Max(float64(maxPosition),float64(nums[i]+i)))
  16. /*
  17. 我们什么时候需要步数 + 1?
  18. 当到达上一步的最远距离的时候,那么意味着我们需要进行一次新的起跳,那么步数 + 1
  19. 并且更新最远距离
  20. */
  21. ////第一次起跳 或 到达跳跃的边界
  22. if i==end{
  23. end =maxPosition
  24. steps++
  25. }
  26. }
  27. return steps
  28. }
  29. func main() {
  30. fmt.Println(jump([]int{1,2}))
  31. fmt.Println(jump([]int{1,2,3}))
  32. fmt.Println(jump([]int{2,3,1,1,4}))
  33. }

image.png