欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(134.加油站問題)

 更新時間:2021年07月27日 17:01:19   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(134.加油站問題),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[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.

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

解法一:

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來記錄出現(xiàn)過的剩余油量的最大值,total記錄當(dāng)前剩余油量的值,start還是記錄起點的位置。當(dāng)total大于mx的時候,說明當(dāng)前位置可以作為起點,更新start,并且更新mx。為啥呢?因為我們每次total加上的都是當(dāng)前位置的油量減去消耗,如果這個差值大于0的話,說明當(dāng)前位置可以當(dāng)作起點,因為從當(dāng)前位置到末尾都不會出現(xiàn)油量不夠的情況,而一旦差值小于0的話,說明當(dāng)前位置如果是起點的話,油量就不夠,無法走完全程,所以我們不更新起點位置start。最后結(jié)束后我們還是看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;
    }
};

類似題目:

Reaching Points

Transform to Chessboard

Cheapest Flights Within K Stops

參考資料:

https://leetcode.com/problems/gas-station/discuss/42568/Share-some-of-my-ideas.

https://leetcode.com/problems/gas-station/discuss/42656/8ms-simple-O(n)-c++-solution

到此這篇關(guān)于C++實現(xiàn)LeetCode(134.加油站問題)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)加油站問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Opencv繪制最小外接矩形、最小外接圓

    Opencv繪制最小外接矩形、最小外接圓

    這篇文章主要為大家詳細(xì)介紹了Opencv繪制最小外接矩形、最小外接圓的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C語言實現(xiàn)簡單的掃雷游戲操作

    C語言實現(xiàn)簡單的掃雷游戲操作

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單的掃雷游戲操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 基于c++計算矩形重疊面積代碼實例

    基于c++計算矩形重疊面積代碼實例

    這篇文章主要介紹了基于c++計算矩形重疊面積代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 一起來看看C++STL容器之string類

    一起來看看C++STL容器之string類

    這篇文章主要為大家詳細(xì)介紹了C++STL容器之string類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 深入詳解C編寫Windows服務(wù)程序的五個步驟

    深入詳解C編寫Windows服務(wù)程序的五個步驟

    本篇文章介紹了,使用C編寫Windows服務(wù)程序的五個步驟的詳細(xì)概述。需要的朋友參考下
    2013-05-05
  • C++ vector的基本使用示例詳解

    C++ vector的基本使用示例詳解

    這篇文章主要介紹了C++ vector的基本使用,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • vscode實現(xiàn)本地代碼自動同步到遠(yuǎn)程機器的步驟

    vscode實現(xiàn)本地代碼自動同步到遠(yuǎn)程機器的步驟

    這篇文章主要介紹了vscode實現(xiàn)本地代碼自動同步到遠(yuǎn)程機器的步驟,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • vc6.0中c語言控制臺程序中的定時技術(shù)(定時器)

    vc6.0中c語言控制臺程序中的定時技術(shù)(定時器)

    這篇文章主要介紹了vc6.0中c語言控制臺程序中的定時技術(shù)(定時器),需要的朋友可以參考下
    2014-04-04
  • 探討:用兩個棧實現(xiàn)一個隊列(我作為面試官的小結(jié))

    探討:用兩個棧實現(xiàn)一個隊列(我作為面試官的小結(jié))

    作為面試官的我,經(jīng)常拿這道用兩個棧實現(xiàn)一個隊列的面試題來考面試者,通過對面試者的表現(xiàn)和反應(yīng),有一些統(tǒng)計和感受,在此做個小結(jié)
    2013-05-05
  • 淺談c++性能測試工具之計算時間復(fù)雜度

    淺談c++性能測試工具之計算時間復(fù)雜度

    有時候除了測量算法的具體性能指數(shù),我們也會希望測試出算法的時間復(fù)雜度,以便我們對待測試的算法的性能有一個更加直觀的了解。本文將介紹c++性能測試工具之計算時間復(fù)雜度。
    2021-06-06

最新評論