环形公交路线上有 n
个站,按次序从 0
到 n - 1
进行编号。我们已知每一对相邻公交站之间的距离,distance[i]
表示编号为 i
的车站和编号为 (i + 1) % n
的车站之间的距离。
环线上的公交车都可以按顺时针和逆时针的方向行驶。
返回乘客从出发点 start
到目的地 destination
之间的最短距离。
示例 1:
输入:distance = [1,2,3,4], start = 0, destination = 1
输出:1
解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。
示例 2:
输入:distance = [1,2,3,4], start = 0, destination = 2
输出:3
解释:公交站 0 和 2 之间的距离是 3 或 7,最小值是 3。
C语言代码演示
//分别从start和destination开始
int distanceBetweenBusStops(int* distance, int distanceSize, int start, int destination){
int sum1=0,sum2=0;
int a=start,b=destination;
while(a!=b){
sum1+=distance[a++];
if(a==distanceSize){
a=0;
}
}
while(start!=destination){
sum2+=distance[destination++];
if(destination==distanceSize){
destination=0;
}
}
return (sum1>sum2)?sum2:sum1;
}
力扣优化版
//只需一次遍历
#define MIN(a, b) ((a) < (b) ? (a) : (b))
int distanceBetweenBusStops(int* distance, int distanceSize, int start, int destination){
if (start > destination) {
int temp = start;
start = destination;
destination = temp;
}
int sum1 = 0, sum2 = 0;
for (int i = 0; i < distanceSize; i++) {
if (i >= start && i < destination) {
sum1 += distance[i];
} else {
sum2 += distance[i];
}
}
return MIN(sum1, sum2);
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容