【數據結構與算法】字節面試算法題


字節跳動在北京有N個工區

題目描述:

第一題. 字節跳動在北京有N個工區,形成一個環狀,Bytebus是往返在各個工區的通勤車,按工區的順序行駛,其中第 i 個工區有汽油 gas[i] 升。你有一輛油箱容量無限的的Bytebus,從第 i 個工區開往第 i+1 個工區需要消耗汽油 cost[i] 升。你從其中的一個工區出發,開始時油箱為空。如果你可以繞環路行駛一周,則返回出發時工區的編號,否則返回 -1。

示例:

輸入:
gas = [1,2,3,4,5]
cost = [3,4,5,1,2]
輸出:
3

思想:

我也不知道這算什么思想,具體看下面注釋吧。時間復雜度O(n)。

代碼:

static int staNum(int[] gas, int[] cost) {
    int len = gas.length;
    int nowLeft=0;
    int preCost=0,flag=0;//flag標記起點下標
    for(int i=0;i<len;++i){
        nowLeft+= gas[i] - cost[(i+1+len)%len];
        if(nowLeft<0){//此時油量為負數
            preCost+=nowLeft;//累計負的油量
            nowLeft=0;//清零重新開始
            flag=i+1;//表示將下一個工區作為起點
        }
    }
    if(nowLeft+preCost<0){//總剩余油量為負數返回-1
        return -1;
    }
    return flag+1;
}

另外,我昨天跟同學討論了下,感覺題目關於 i 的理解有點歧義,比如,從 gas[0] 到 gas[1] 需要耗費的油量是 cost[0] 還是 cost[1] 啊,上面的代碼是按照 cost[1] 來的。如果是 cost[0] 的話,就更直白了,把代碼中的 cost[(i+1+len)%len] 換成cost[i],最后return flag就行。不過問題不大,思路是一樣的。

這是昨天在牛客上看到的一個面經里的題,如果解答有誤,看官們直言不諱即可~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM