Gas Station|leetcode題解

這個題目,只要理清里路,代碼就容易寫了,下面是我提交的代碼,耗時10ms.

思路:

1.尋找第一個left[i]>0的站點S,作爲起始站點。此時(gas[i]>cost[i])

2.以S作爲起始站點,判斷其合法性,如果合法,則返回其下標,不合法則進入第3步

3.尋找非連續的下一個left[i]>0的站點作爲S,轉入第2步。(因爲如果S合法,那麼和S相連的left[i]>0的站點也一定不合法)

int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
        int n=gas.size();
        if(1==n)return gas[0]>=cost[0]?0:-1;
        vector<int>left(n,0);
        for(int i=0;i<n;i++)left[i]=gas[i]-cost[i];
        int i=0;
        while(i<n&&left[i]<=0)i++;
        if(i==n)return -1;
        while(i<n){
            int sum=left[i];
            bool state=true;
            for(int j=(i+1)%n;j!=i;j=(j+1)%n){
                sum+=left[j];
                if(sum<0){state=false;break;}
            }
            if(state)return i;
            while(i<n&&left[i]>0)i++;
            while(i<n&&left[i]<=0)i++;
        }
        return -1;
    }
程序,容易出錯的點:
1.只有一個站點的時候,也要判斷gas和cost的大小
2.內層循環,要對下表是否越界進行判斷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章