golang力扣leetcode 1345.跳跃游戏IV

简介: golang力扣leetcode 1345.跳跃游戏IV

1345.跳跃游戏IV

1345.跳跃游戏IV

题解

i + 1 满足:i + 1 < arr.length

i - 1 满足:i - 1 >= 0

j 满足:arr[i] == arr[j] 且 i != j


问从第一个出发到达最后一个需要几步,其实就是一个无向图,那么对于需要最短路径的问题,直接BFS就能做出来,每个元素连着 <i -1> <i+1><value相同>的这些边,那么对于这个图来说,可能出现无限循环的情况,用一个visited的map来处理

代码

package main
type P struct {
  idx, step int
}
func minJumps(arr []int) int {
  queue := make([]P, 0)
  visited := make(map[int]bool)
  repeat := make(map[int][]int)
  for k, v := range arr {
    repeat[v] = append(repeat[v], k) //把值相同的下标存起来
  }
  queue = append(queue, P{0, 0})
  visited[0] = true
  for {
    top := queue[0]
    queue = queue[1:]
    idx, step := top.idx, top.step
    if idx == len(arr)-1 {
      return step
    }
    //值相同
    for _, v := range repeat[arr[idx]] {
      if !visited[v] {
        queue = append(queue, P{
          idx:  v,
          step: step + 1,
        })
      }
      visited[v] = true
    }
    //i-1
    if idx-1 >= 0 {
      if !visited[idx-1] {
        queue = append(queue, P{
          idx:  idx - 1,
          step: step + 1,
        })
      }
      visited[idx-1] = true
    }
    //i+1
    if idx+1 <= len(arr)-1 {
      if !visited[idx+1] {
        queue = append(queue, P{
          idx:  idx + 1,
          step: step + 1,
        })
      }
      visited[idx+1] = true
    }
    //BFS三种情况遍历完了,把当前这个值删除
    delete(repeat, arr[idx])
  }
}


目录
相关文章
|
3月前
LeetCode题:174. 地下城游戏
LeetCode题:174. 地下城游戏
37 0
LeetCode题:174. 地下城游戏
|
18天前
|
算法
【力扣】55.跳跃游戏
【力扣】55.跳跃游戏
|
4月前
|
Shell 机器学习/深度学习 Linux
Linux 终端操作命令(2)内部命令
Linux 终端操作命令(2)内部命令
21 0
Linux 终端操作命令(2)内部命令
|
4月前
|
Java 容器 程序员
Java语言程序设计试卷6套
Java语言程序设计试卷6套
135 0
Java语言程序设计试卷6套
|
4月前
|
算法 Java Go
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
28 0
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
|
4月前
|
Go 容器 SQL
【Golang Leetcode】总目录(Day1~100)
【Golang Leetcode】总目录(Day1~100)
475 1
【Golang Leetcode】总目录(Day1~100)
|
4月前
代码随想录Day42 动态规划10 LeetCode T123 买卖股票的最佳时机III T188买卖股票的最佳时机IV
代码随想录Day42 动态规划10 LeetCode T123 买卖股票的最佳时机III T188买卖股票的最佳时机IV
33 0
|
4月前
|
测试技术
代码随想录 Day37 完全背包理论基础 卡码网T52 LeetCode T518 零钱兑换II T377 组合总和IV
代码随想录 Day37 完全背包理论基础 卡码网T52 LeetCode T518 零钱兑换II T377 组合总和IV
39 0
|
4月前
leetcode:292. Nim 游戏(数学推理)
leetcode:292. Nim 游戏(数学推理)
18 0
|
4月前
|
缓存 算法 测试技术
【单调栈】【二分查找】LeetCode: 2454.下一个更大元素 IV
【单调栈】【二分查找】LeetCode: 2454.下一个更大元素 IV

热门文章

最新文章