主题3:寻友之旅
题目描述
小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)
请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)
解题思路
语言 & 方法:Java语言 | 二分法
使用二分法的话主要分为两种情况:
第一种情况:当N大于K时,因公交只能向前走,不能向后走。所以小青在小码后面,答案就为N-K;
第二种情况:当N小于K时,小青的位置为N,小码的位置为K。假设N在K/2和K之间,那N要么到K位置,要么到K/2位置。进行对比,到K/2的代价为N-K/2+1(K若为奇数则再加1),到K的代价为K-N。假设N<K/2,那么判定的区间就为K/4到K/2之间,再进行判断。最后获得的答案基础上再加上公交车的时间。
代码:
码上掘金链接:code.juejin.cn/api/raw/718…
总的来说,本题的解题思路是使用二分法,判断N在K的哪个区间,从而找出N到K之间的最短时间。使用的测试用例有:3、6;13、39;
谢谢大家阅读!希望我们都可以在本次青训营中收获到自己想要学到的东西和经验~