当青训营遇上码上掘金
题目
-
小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)
作者:青训营官方账号
链接:juejin.cn/post/718775…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在线测试
解题思路
首先就是如果小青N在小码K的右边 也就是N>K的情况下,由于题目给出 公交车不能后退,那么小青只能选择步行往后面退,所以直接N-K就可以 其次,如果是小青在小码的左边,也就是说他可以选择步行或者坐公交。传统思路就是说小青可以全程坐公交、小青可以坐公交在步行、小青可以全程步行。总之这三种情况中求最小值。原本是想用动态规划来做。但是好久没刷算法于是全忘了 哈哈哈 有大佬会的话可以评论区po我一下。 回归正题。我选择反其道而行,那就是直接判断k的值。循环判断如果k的值是偶数的话,让他除二。如果不是偶数的话,让他加1在除。当k等于n的值之后,结束这个循环。这样得出的值同样也是最小值。
测试
例如测试n=1,k=14 得出的路线应该是公交2,4,8然后步行回退到7 在公交到14 总时间为5.经测试,与预期值一样。