当青训营遇上码上掘金

1,132 阅读1分钟

1月13日,青训营x码上掘金,主题3:寻友之旅

该程序使用java实现,源码为:

package test; /**
 * 支持 import Java 标准库 (JDK 1.8)
 */

import java.util.*;

/**
 * 注意:目前 Java 代码的入口类名称必须为 Main(大小写敏感)
 */
public class Main {
    public static int minDistance(int n,int k){
        int walk = 0;
        int publicTransport = 0;
        if(n <= k) {
            walk = k - n;
            publicTransport = (k - n) >> 1;
        }else {
            walk = n - k;
            publicTransport = walk+1;
        }
        return Math.min(walk,publicTransport);
    }


    public static void main(String[] args) {
        System.out.println("最小距离为"+minDistance(10,0)+"分钟");
    }
}

该题的思路非常清晰明了,给出小青与小码家在一条直道上,步行1分钟到达x+1坐标点处,乘公交1分钟到达2x坐标点处,所以只需要判断小青家坐标点n与小码家坐标点k,当n<=k时,小青到小码家步行需要k-n分钟,乘公交需要(k-n)\2分钟;当小青家坐标点n大于小码家坐标点k时,小青到小码家步行需要n-k分钟,此时公交不可行,总是设置大于步行时间,最后通过Math.min()函数返回二者最小值即可。 需要注意的是,该问题虽然浅显易懂,但是却有一个很隐蔽的坑,即公交车只能正向,不能反向行驶,不妨设向右为正方向,因为题目只给出n坐标点>=0,k坐标点<=100000,因为小青家坐标点没有上限,所以,小青家坐标点可能大于100000,此时,乘公交只能反方向,这是,不允许的,左移此时只能步行到达小码家,若一上来就忽略该坑,最后会得出与题目不匹配的到达时间,此时无论怎么走,都是乘公交最快,在编写代码时会经常忘记一些隐含条件,此时就会造成算法错误,所以,每次写算法题时我都会仔细观察已知条件,整理出思路后再进行代码算法的编写,要注意由于没有足够多的测试数据,本算法可能错误,或步骤还需优化,所以该程序仅仅供参考,并不能作为标准答案,小伙伴也可以按照思路使用其他语言来实现,或者基于该思路设计更加简洁,合理,标准的代码。