当青训营遇上码上掘金之寻友之旅

94 阅读2分钟

当青训营遇上码上掘金

主题 3:寻友之旅

小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)

请帮助小青通知小码,小青最快到达时间是多久?

输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)

示例1:

输入:n=5 k=16
输出:3
解释:
5-1=4
42=8
8
2=16

示例2:

输入:n=10 k=17
输出:7
解释:如果是k>n,也就是需要向左走,没法坐公交车,每次只能走一格

思路分析

  1. 这道题目是最短路径问题,可以用BFS,DFS来解答
  2. BFS(广度优先搜索)搜索,就是向水的波纹一样,一层一层的向外探索,直到到达目的地
  3. 和常见的在网格中进行搜索不同,网格中的搜索有四个方向(上下左右),或者八个方向(上下左右,上左,上右,下左,下右),但是这道题目是一维的,只有左右两个方向,但是不要忘记,还有汽车可以移动到2*X,也就是每次走的应该遍历的状态为3个
  4. 需要用开一个哈希表来存储走过的节点,防止走到重复的点进入死循环

代码展示