当青训营遇上码上掘金
本文对「青训营 X 码上掘金」第三题进行分析与代码编写。
题目要求
寻友之旅
小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)
请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)
问题分析
当N大于K时,小青只能倒退才能找到小码。
当N小于K时,可以采用贪心算法的思想,先求出坐车到小码身边的时间,只要K值大于当前小青位置的1.5倍,就进行位移,即乘2操作。最后加上两者距离的绝对值即可。
代码
# 小青在地点 n ,小码在地点 k, 小青去找小码
def main(n:int, k:int) -> None:
time=0
if n>=k: time=n-k
else:
while k>1.5*n:
n*=2
time+=1
time+=abs(k-n)
print(time)
if __name__ == '__main__':
main(1,5)
main(3,5)
main(5,5)
main(7,5)
main(9,5)
main(74323,544)
main(9543,50000)
main(10000,50000)
运行结果
3 2 0 2 4 73779 11830 10002
总结
所以说这个问题还是很简单的,只需要仔细分析题目并作出合理的判断,稍加思考,就可以写出正确的答案。
如果对过程和结果有疑问的小伙伴可以在评论区发表不同观点,如果我上线了&看到了评论会回复你的。
另外python是写算法题非常上手的语言,写起来就像飞一样的感觉,独特的函数式编程方法可以帮助你更关注解题思路和逻辑,非常推荐大家使用。