最短公交车问题
题目要求:环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离,环线上的公交车都可以按顺时针和逆时针的方向行驶,返回乘客从出发点 start 到目的地 destination 之间的最短距离。
思路如下:
- 判断起始站与终点站的大小,若起始站比终点站大则两者替换下,总之始终保证起始站比终点站小
- 判断顺时针到达终点站与逆时针到达终点站距离的大小,二者取小;
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;
}
}
此代码可优化,因我是一个懒人,故这里就不想优化了,很明显可以抽取一个方法的………….