寻友之旅-小青和小码

104 阅读2分钟

当青训营遇上码上掘金,也就是小青寻找到小码的故事。

今天天气真好啊,此时小青想去找小码玩,小码接受到小青想去他自己玩的时候特别开心,所以就准备在家好好的打扮一下,之后好去跟小青一起去游乐场,欢乐谷等等好玩的地方去玩呀。所以小青准备好指定路线计划想更加快速的去小码家里随后进行愉快的玩耍。

此时小青已经准备好了笔记本和草稿纸以及笔来计算出去小码的路线最优解(悄悄说一下小青是一个优秀的程序员哦),随后她就列出了一些条件,如下:他们家在一条线上,假设她自己在X节点,小码在K节点,那么就有如下选择

步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1

公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)

此时小青就进行头脑风暴来计算如何快速到达列出一下的解决思路如下:

一共用二种大的情况如下:

1.当小青在小码的节点之后那么就意味着只能通过步行去小码家里了所以只需要移动N-K的单位时间。如图所示:

1.png

2. 当小青在小码的节点之后那么就意味着可以公交直接到达和公交混合不行一起到达,所以这里是二个小的情况如第一种小情况:

2.1当公交可以直接达到小码的家,那么总共时间就是K/N-1的单位时间如图所示:

2.png

2.2 当公交车不能直接达到小码家情况的时候那么此时就是公交和步行之间混合起来进行去小码家,此时就有这样的一个思路假设num(指K/N,取整)那么之前的路程可以坐num-1的单位时间的公交车,此时就面临到一个选择,那么到底是坐到小码家前面下车步行,还是坐到小码家后面进行往回走不行呢。此时只需要对比以下总共的时间就可以计算出最优解了那么列出一个left表示之前下车,列出一个right表示之后下车。所以只需要比较left和right的值就可以了,left=K - num * N + num - 1,right=(num + 1) * N - K + num.如图程序所示:

3.png

这样小青就可以迅速的通过程序算出去小码家的最优解啦。真是一场快乐之旅。