1184. 公交站间的距离(力扣)

环形公交路线上有 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离。

环线上的公交车都可以按顺时针和逆时针的方向行驶。

返回乘客从出发点 start 到目的地 destination 之间的最短距离。

示例 1:

图片[1]-1184. 公交站间的距离(力扣)-it同学
输入:distance = [1,2,3,4], start = 0, destination = 1
输出:1
解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。

示例 2:

图片[2]-1184. 公交站间的距离(力扣)-it同学
输入: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
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容