LeetCode.1184-公交車站之間的距離(Distance Between Bus Stops)

這是小川的第414次更新,第447篇原創(chuàng)

看題和準備

今天介紹的是LeetCode算法題中Easy級別的第265題(順位題號是1184)。公交車有n個從0到n-1的車站,形成一個圓圈。我們知道所有相鄰車站對之間的距離,其中distance[i]是車站i與車站(i + 1)%n之間的距離。

公交車沿兩個方向運行,即順時針和逆時針。返回給定起點和終點之間的最短距離。

輸入:distance = [1,2,3,4], start = 0, destination = 1
輸出:1

image

說明:0與1之間的距離為1或9,最小為1。


輸入:distance = [1,2,3,4], start = 0, destination = 2
輸出:3
image

說明:0和2之間的距離為3或7,最小為3。


輸入:distance = [1,2,3,4], start = 0, destination = 3
輸出:4
image

說明:0與3之間的距離為6或4,最小為4。


約束

  • 1 <= n <= 10^4
  • distance.length == n
  • 0 <= start, destination < n
  • 0 <= distance[i] <= 10^4

第一種解法

題目的意思是求兩個車站之間的距離,而所有車站組合起來形成一個環(huán),因此可以從順時針方向出發(fā),也可以從逆時針方向出發(fā)。我們只需要做兩件事情即可,第一是保證出發(fā)點的坐標小于終點,第二是比較順時針出發(fā)的距離和逆時針出發(fā)的距離大小。

針對第一點,可以做個判斷,如果出發(fā)點坐標大于終點坐標,就交換兩元素的值,保證出發(fā)點的坐標值始終小于終點的值。

針對第二點,順時針方向出發(fā)的距離之和很好計算,那么逆時針方向出發(fā)的距離和呢?因為整個路徑是成環(huán)形,逆時針方向出發(fā)的距離和,就是用總長減去順時針方向出發(fā)的距離和的差值。

使用兩個循環(huán),一個計算總長,一個計算從順時針方向出發(fā)的距離和,比較順時針出發(fā)的距離與總長減去順時針出發(fā)的距離的大小即可。

public int distanceBetweenBusStops(int[] distance, int start, int destination) {
    if (start > destination) {
        int temp = start;
        start = destination;
        destination = temp;
    }
    int sum = 0;
    for (int dis : distance) {
        sum += dis;
    }
    int part = 0;
    for (int i=start; i<destination; i++) {
        part += distance[i];
    }
    return Math.min(part, sum-part);
}


第二種解法

針對第一種解法,我們可以優(yōu)化下,只使用一個循環(huán),在循環(huán)內(nèi)部單獨做個判斷,計算順時針方向出發(fā)的距離和。

public int distanceBetweenBusStops2(int[] distance, int start, int destination) {
    if (start > destination) {
        int temp = start;
        start = destination;
        destination = temp;
    }
    int sum = 0, part = 0;
    for (int i=0; i<distance.length; i++) {
        if (i >= start && i < destination) {
            part += distance[i];
        }
        sum += distance[i];
    }
    return Math.min(part, sum-part);
}


小結

算法專題目前已更新LeetCode算法題文章271+篇,公眾號對話框回復【數(shù)據(jù)結構與算法】、【算法】、【數(shù)據(jù)結構】中的任一關鍵詞,獲取系列文章合集。

以上就是全部內(nèi)容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發(fā)就是對我最大的回報和支持!

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 陳氏太極拳老架一路講義 前言 寫給喜愛太極拳的武術朋友們 中華武術,源遠流長,今雖門派繁多,實一脈相承。太極拳以它...
    阿德樂閱讀 6,356評論 0 12
  • One 1 the [e?, ei:] art.這,那 ad.[用于比較級;最高級前] 2 be [bi:,bi]...
    梁培林閱讀 9,633評論 0 10
  • 1. file n. 文件;v. 保存文件2. command n. 命令指令3. use v. 使用用途4. p...
    喵嗚Yuri閱讀 834評論 0 4
  • 循環(huán)迷茫的時間 帶上面具的表演 不過一場兒戲的表現(xiàn) 那些令人旁邊的狡辯 冷眼不屑的待見 自欺欺人的犯賤 自欺欺人的...
    漓傷閱讀 314評論 2 2
  • 我們終將成為自己討厭的人,是一件壞事嗎?這是我在看《奇葩說》里一個很有感慨的題目。 從小我們就討厭父母的嘮叨,在心...
    白衣咸飯丶閱讀 6,685評論 0 2

友情鏈接更多精彩內(nèi)容