第五届青训营码上掘金——寻友之旅

59 阅读2分钟

当青训营遇上码上掘金

我在本次码上掘金中选择的题目为 “寻友之旅”,题目如下:

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

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

解答该题目时存在一处小坑,便是题目括号中的内容“公交不可以向后走”。因此,在编写代码时,需根据小青与小码各自所在的位置分为两种情况:

①当小青位于小码前方时便不能选择公交车这种交通方式,只能步行到达小码的位置,此时的结果便为小青与小码之间的距离(小青步行的速度为1)。

②而小青位于小码后方时,可以首先选择乘坐公交车的交通方式,若未直接到达小码所处的位置时,再判断直接步行到达目的的时间与乘公交车后向前(或向后)再步行一段后的时间相加哪个用时更短,输出更短用时即为正确答案。

代码如下

(码上掘金平台似乎不支持输入值,若要运行代码需修改代码中N、K的值为具体值)