各位青训营的码友们,大家好!
我本次的[青训营 X 码上掘金]主题创作活动选择的主题是 主题3:寻友之旅。选择的语言为Python语言。
主题要求
小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走) 请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)
解题思路
首先,通过读题可知,公交车是不可以向反方向走的,所以当小青N比小码K大时就不可以坐公交了,只能够通过小青步行到达小码家;只有在小青N比小码K小时,就有步行和公交两种出行方式。
这个问题可以分三种情况讨论:
1. 当N和K相等时,最短用时为0;
2. 当N比K大时,因为公交车不能向后走,此时小青只能选择步行,步行速度是1节点/分钟,小青从N到K最短用时是(N - K)分钟;
3. 当N比K小时,小青可以直接步行过去,也可以先步行到离K比较近的节点再步行,这时我们需要计算两种方法所用时间,选择时短的方法。
下面是两种方法走法的时间分析:
1. 直接步行用时(K - N)分钟
2. 使用递归的方法,先乘车一次再计算后续需要的时间,总用时是(1 + 乘车一次后从2N到K所需最短时间) 通过上述思路,编写get_shortest_time函数,分情况处理。
代码如下
以上就是我对于[青训营 X 码上掘金]主题创作活动选择的主题是 主题3:寻友之旅的理解与认识,如有不当之处,欢迎各位大佬批评指正(第一次发布自己的作品,有些紧张)!