青训营 X 码上掘金

59 阅读2分钟

寻友之旅

小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。

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

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

题解

对于这一题,对于一些佬来说肯定很容易。应该就是双指针的一个题。

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

首先,步行。小青是向前一个站点,持续+1。同时的,也可以-1。(-1那样的话其实可以与公交进行搭配,比方:小青坐过站)

其次,公交。在坐公交的时候每分钟到站点的时候都是偶数

思考

  1. 输入两个数值(小青,小码)
  2. 最快正常速度肯定是公交速度
  3. 但当小码家是为奇数时,坐公交应+1
  4. 但相对来说,公交坐过站相对来说,不会使得有最快速度。毕竟为偶数或者奇数(所以这一点我废除)
  5. 再就是当小青家与小码家只有一站之隔的时候,走路肯定是最快的

代码思路

  1. 判定小码家是否为偶数,为偶数并且大于等于2站则坐公交
  2. 判定小码家是否为一站之隔,是的话则走路过去
  3. 判定小码家是否为奇数,为奇数并且大于等于2站则坐公交+1(步行)

代码

小码的家为偶数并且大于等于2站:

if(k % 2 == 0 && k >= 2){
            for(int i = n;i < k ;i++){
                g = i*2;
                if(g >= k){
                    System.out.print("乘车时间:"+i);
                    break;
                }
            }
        }

小码的间隔为一站之隔:

if(k + 1 == n || k - 1 == n){
        for(int i = n;i <= k;i++){
            b = i+1;
            if(b >= k){
                System.out.print("步行时间:"+b);
                break;
              }
          }
        }
    }

小码家的间隔为奇数时:

if(k % 2 != 0 && k >= 2){
        for(int i = n;i < k ;i++){
                bg = i * 2;
                if(bg >= k){
                    System.out.print("走路+乘车时间:"+bg/2);
                    break;
                }
            }
        }