当前位置: 首页 > article >正文

【LeetCode】每日一题 2024_9_17 公交路线(BFS)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:公交路线

代码与解题思路

func numBusesToDestination(routes [][]int, source int, target int) int {
    // 用类似迪杰斯特拉的思路,把线路搜索一遍,然后取:最少乘坐的公交车数量
    // key 代表车站,value 代表能到该车站的公交车列表
    bus := map[int][]int{} // 先建图
    for i, v := range routes {
        for _, x := range v {
            bus[x] = append(bus[x], i)
        }
    }

    // 记录起点到每个站的最短路,key 为车站编号,value 是起点到该车站的最短路
    // 初始车站 source,自己到自己的距离为 0
    dis := map[int]int{source: 0}
    q := []int{source} // 我这里选择用 bfs 遍历
    for len(q) > 0 {
        x := q[0] // x 为当前车站
        q = q[1:]
        disX := dis[x] // 起点到 x 车站的最短路
        for _, i := range bus[x] { // 遍历所有能到 x 车站的公交车 i
            for _, y := range routes[i] { // 遍历公交车 i 经过的所有车站
                if _, ok := dis[y]; !ok { // 该车站 y 没被访问过
                    dis[y] = disX + 1 // 从 x 站上车,在 y 站下车,起点到 y 站需要的公交数量 + 1
                    q = append(q, y) // 入队,下次从 y 站开始出发
                }
            }
            routes[i] = nil // 公交车 i 已经遍历过了
        }
    }
    if v, ok := dis[target]; ok { // 如果能走到 target
        return v
    }
    return -1 // 不能走到 target 站
}

核心思路如注释

我习惯在做比较复杂代码的题目的时候,一边写一边用注释记录我的思路和想法,这样可以保证思路的连贯,以及防止自己乱起的变量名过一会儿忘记这个变量用来做什么事情

认真读题,然后跟着代码和注释走即可。

视频实况

【【LeetCode】每日一题 2024_9_17 公交路线(BFS)】

每天进步一点点

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


http://www.kler.cn/news/312393.html

相关文章:

  • Effective Java 学习笔记45-48 Stream
  • VS code 查看 ${workspaceFolder} 目录指代路径
  • 设计模式-行为型模式-解释器模式
  • Python 解析 Charles JSON Session File (.chlsj)
  • 攻防世界--->gametime
  • 数据结构-2.7.单链表的查找与长度计算
  • linux-系统管理与监控-磁盘管理
  • mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
  • DeDeCMS靶场漏洞复现
  • 前端vue-父传子
  • 2024年亲测好用的四大在线翻译工具大盘点!
  • keras和tensorflow可用的一组版本
  • 【百日算法计划】:每日一题,见证成长(013)
  • MySQL练手题--获得最近第二次的活动(困难)
  • 【JVM】符号引用 和 直接引用
  • 中国计算机学会(CCF)推荐中文科技期刊目录(2019年)
  • nacos报Client not connected, current status:STARTING
  • Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图
  • Ubuntu在CMakeLists.txt中指定OpenCV版本的参考方法
  • 【QT基础】创建项目项目代码解释
  • Python和Java的自动化测试技术研究及应用探索
  • Linux Vim编辑器常用命令
  • 【源码+文档+调试讲解】健身房管理平台小程序
  • 【Linux修行路】网络套接字编程——UDP
  • 828华为云征文 | 云服务器Flexus X实例:one-api 部署,支持众多大模型
  • 信息化时代下的高标准农田灌区:变革与机遇并存
  • 使用Docker Compose一键部署
  • 105.游戏安全项目-基址的技术原理-分析技巧
  • 游戏性能优化
  • 硬件工程师笔试面试学习汇总——器件篇目录