2021-12-04:公交路线。给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。 例如,路线 routes[0]
2021-12-04:公交路线。给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。
例如,路线 routes[0] = [1, 5, 7] 表示第 0 辆公交车会一直按序列 1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> … 这样的车站路线行驶。
现在从 source 车站出发(初始时不在公交车上),要前往 target 车站。 期间仅可乘坐公交车。
求出 最少乘坐的公交车数量 。如果不可能到达终点车站,返回 -1 。
来自力扣815。
来自三七互娱。
答案2021-12-04:
以公交线做宽度优先遍历。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
routes := [][]int{{1, 2, 7}, {3, 6, 7}}
source := 1
target := 6
ret := numBusesToDestination(routes, source, target)
fmt.Println(ret)
}
func numBusesToDestination(routes [][]int, source, target int) int {
if source == target {
return 0
}
n := len(routes)
// key : 车站
// value : list -> 该车站拥有哪些线路!
map0 := make(map[int][]int)
for i := 0; i < n; i++ {
for j := 0; j < len(routes[i]); j++ {
if _, ok := map0[routes[i][j]]; !ok {
map0[routes[i][j]] = make([]int, 0)
}
map0[routes[i][j]] = append(map0[routes[i][j]], i)
}
}
queue := make([]int, 0)
set := make([]bool, n)
for _, route := range map0[source] {
queue = append(queue, route)
set[route] = true
}
len0 := 1
for len(queue) > 0 {
nextLevel := make([]int, 0)
for _, route := range queue {
bus := routes[route]
for _, station := range bus {
if station == target {
return len0
}
for _, nextRoute := range map0[station] {
if !set[nextRoute] {
nextLevel = append(nextLevel, nextRoute)
set[nextRoute] = true
}
}
}
}
queue = nextLevel
len0++
}
return -1
}
执行结果如下:
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2020-12-04 2020-12-04:mysql 表中允许有多少个 TRIGGERS?
2020-12-04 2020-12-03:mysql中,Heap 表是什么?
2020-12-04 2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ?
2020-12-04 2020-12-01:java中,什么是安全点和安全区域?
2020-12-04 2020-11-30:java中,卡表和记忆集的区别?