当青训营遇上码上掘金之寻友之旅的python和go实现

124 阅读2分钟

当青训营遇上码上掘金

这是参加青训营开始学习go语言的第二天,因为之前一直使用python语言,所以题解一开始用python语言完成,为了练习go语言所以使用go语言重写了一遍以供对比。python转go的同学们可以一起交流经验哦。 首先是题目

主题三:寻友之旅

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

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

该题可以使用广度优先搜索算法来解决,从小青所在的地点开始,小青可以选择步行从x移动到位置x-1或x+1,也可以选择公交从x移动到2×x,依次遍历小青可以到达的所有位置,直到找到小码所在的位置为止。

在python实现中使用字典来存储每个位置的步数(时间),使用列表作为队列存储已经到达的位置,将每个位置步行与公交一次,然后到达的位置加入队列,最后更新字典中每个位置对应的步数。循环直到找到小青到达小码的位置为止,如果最终没有找到则返回-1。这样可以遍历出从一个地点出发到达每个位置的最短步数,到达小青的位置则停止遍历。 然后是go语言实现,在go中没有字典因此使用map作为字典,go中不允许变量声明却不使用,因此多了对_赋值进行规避,go语言没有while但是for循环更加灵活。附上代码