最短公交车问题

题目要求:环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离,环线上的公交车都可以按顺时针和逆时针的方向行驶,返回乘客从出发点 start 到目的地 destination 之间的最短距离。

思路如下:

  1. 判断起始站与终点站的大小,若起始站比终点站大则两者替换下,总之始终保证起始站比终点站小
  2. 判断顺时针到达终点站与逆时针到达终点站距离的大小,二者取小;
public int distanceBetweenBusStops(int[] distance, int start, int destination) {
		//判断始发站与终点站大小
        if(start > destination ){
			//进入这里说明始发站比终点站大,大则交换位置
            int tmp = start;
            start = destination;
            destination = tmp;
			
			//定义两个变量用来判断顺时针与逆时针到达终点站的距离
            int distance1 = 0;
            int distance2 = 0;
			//通过遍历得到顺时针的距离
            for(int i = start; i<destination;i++){
                distance1 +=distance[i];
            }
			
			//通过遍历得到逆时针的距离
            for(int i = start; i>0;i--){
                distance2 +=distance[i-1];
            }
            for(int i = distance.length-1; i>destination-1;i--){
                distance2 +=distance[i];
            }
			//返回距离较小得值
            return distance1 > distance2 ? distance2 : distance1;
        }else{
			//定义两个变量用来判断顺时针与逆时针到达终点站的距离
            int distance1 = 0;
            int distance2 = 0;
			//通过遍历得到顺时针的距离
            for(int i = start; i<destination;i++){
                distance1 +=distance[i];
            }
			
			//通过遍历得到逆时针的距离
            for(int i = start; i>0;i--){
                distance2 +=distance[i-1];
            }
            for(int i = distance.length-1; i>destination-1;i--){
                distance2 +=distance[i];
            }
			//返回距离较小得值
            return distance1 > distance2 ? distance2 : distance1;
        }
}         

此代码可优化,因我是一个懒人,故这里就不想优化了,很明显可以抽取一个方法的………….