寻友之旅

47 阅读1分钟

当青训营遇上码上掘金

题目

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

请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)

基本思路

主要分成三种情况:

  • 小青和小码一开始就在一起 (N == K)
  • 小青在小码前面 (N < K)
  • 小码在小青前面 (N > K)

解决方法:

  • N==K

    • 直接返回结果0
  • N<K 这里又分为两种情况

    • 小青坐公交到小码后面 然后往回走
    • 小青坐公交到小码前面 继续往前走

    只要把两种情况全部计算出来,取得最小值即可

    计算过程只需要循环判断: 小青坐了一站公交后是否在小码后面

    并且同时记录下坐公交站数

    与最后的相差距离进行计算

    最后即可得到我们所需要的答案

  • N>K

    • 这种情况可以将N和K进行反转,就与第二种情况相同了

代码

(本地编译器跑着没啥问题,不太懂这个码上掘金是怎么用的)

后记

这种问题应该有更加优质的解法,不过我还是个小菜鸡,还需要继续努力学习,这是在掘金发的第一篇(算是题解?)

部分引用

作者:青训营官方账号
链接:juejin.cn/post/718775…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。