91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++實現LeetCode之加油站問題的示例分析

發布時間:2021-07-28 09:04:54 來源:億速云 閱讀:178 作者:小新 欄目:開發技術

這篇文章主要介紹C++實現LeetCode之加油站問題的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

[LeetCode] 134.Gas Station 加油站問題

There are N gas stations along a circular route, where the amount of gas at station i is gas[i].

You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations.

Return the starting gas station's index if you can travel around the circuit once, otherwise return -1.

Note:
The solution is guaranteed to be unique.

這道轉圈加油問題不算很難,只要想通其中的原理就很簡單。我們首先要知道能走完整個環的前提是gas的總量要大于cost的總量,這樣才會有起點的存在。假設開始設置起點start = 0, 并從這里出發,如果當前的gas值大于cost值,就可以繼續前進,此時到下一個站點,剩余的gas加上當前的gas再減去cost,看是否大于0,若大于0,則繼續前進。當到達某一站點時,若這個值小于0了,則說明從起點到這個點中間的任何一個點都不能作為起點,則把起點設為下一個點,繼續遍歷。當遍歷完整個環時,當前保存的起點即為所求。代碼如下:

解法一:

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int total = 0, sum = 0, start = 0;
        for (int i = 0; i < gas.size(); ++i) {
            total += gas[i] - cost[i];
            sum += gas[i] - cost[i];
            if (sum < 0) {
                start = i + 1;
                sum = 0;
            }
        }
        return (total < 0) ? -1 : start;
    }
};

我們也可以從后往前遍歷,用一個變量mx來記錄出現過的剩余油量的最大值,total記錄當前剩余油量的值,start還是記錄起點的位置。當total大于mx的時候,說明當前位置可以作為起點,更新start,并且更新mx。為啥呢?因為我們每次total加上的都是當前位置的油量減去消耗,如果這個差值大于0的話,說明當前位置可以當作起點,因為從當前位置到末尾都不會出現油量不夠的情況,而一旦差值小于0的話,說明當前位置如果是起點的話,油量就不夠,無法走完全程,所以我們不更新起點位置start。最后結束后我們還是看totoa是否大于等于0,如果其小于0的話,說明沒有任何一個起點能走完全程,因為總油量都不夠,參見代碼如下:

解法二:

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int total = 0, mx = -1, start = 0;
        for (int i = gas.size() - 1; i >= 0; --i) {
            total += gas[i] - cost[i];
            if (total > mx) {
                start = i;
                mx = total;
            }
        }
        return (total < 0) ? -1 : start;
    }
};

以上是“C++實現LeetCode之加油站問題的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳池县| 罗江县| 沽源县| 安泽县| 玛纳斯县| 吉木萨尔县| 搜索| 托克逊县| 全南县| 周至县| 南川市| 四川省| 内江市| 古丈县| 崇文区| 平凉市| 柞水县| 浙江省| 南昌市| 平利县| 策勒县| 重庆市| 正阳县| 衡东县| 淄博市| 云霄县| 莲花县| 新田县| 美姑县| 广灵县| 高雄县| 云林县| 吕梁市| 北安市| 蒲江县| 太保市| 寻甸| 依安县| 祁连县| 奇台县| 尤溪县|