加油站

題目

來源:力扣(LeetCode)
鏈接:加油站

解法一

使用二重循環, 從0到gasSize枚舉i,從第i個加油站出發枚舉,若可以到達下一個加油站,令j=i+1,記下每到下一個站剩下的油量,若油量小於0.,則無法繞環路一週,退出該層循環,否則開往下一個加油站。循環至j==i。
時間複雜度爲O(n2)
代碼

int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize){
    int curgas=0;
    for(int i=0;i<gasSize;i++){
        curgas=gas[i]-cost[i]; //能否達到第i+1個加油站
        if(curgas<0) continue;// 從第i個加油站出發無法繞環路一週
        int j=(i+1)%gasSize; 
        while(j!=i){
            curgas=curgas+gas[j]-cost[j];//開往下一個加油站剩下的油量
            if(curgas<0)
                break; //無法到達下一個加油站
            j=(j+1)%gasSize;
        }
        if(j==i)
           return i;
    }
    return -1;
} // o(n^2) 的複雜度

解法二

int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize){
    int curGas=0;
    int sumRemainGas=0;
    int st=0;
    for(int i=0;i<gasSize;i++){
        sumRemainGas+=gas[i]-cost[i];
        curGas+=gas[i]-cost[i]; //存儲從st站出發到第i+1站臺剩下的油量
        if(curGas<0){ 
            st=i+1;
            curGas=0;
        }
    }
    if(sumRemainGas>=0)
        return st;
    else
        return -1;
} // o(n) 的複雜度
發佈了38 篇原創文章 · 獲贊 13 · 訪問量 4019
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章