Day69 加油站

在一條環(huán)路上有 N 個(gè)加油站,其中第 i 個(gè)加油站有汽油 gas[i] 升椭更。你有一輛油箱容量無限的的汽車,從第 i 個(gè)加油站開往第 i+1 個(gè)加油站需要消耗汽油 cost[i] 升。你從其中的一個(gè)加油站出發(fā)京腥,開始時(shí)油箱為空鲸郊。如果你可以繞環(huán)路行駛一周丰榴,則返回出發(fā)時(shí)加油站的編號,否則返回 -1

https://leetcode-cn.com/problems/gas-station/

示例1:

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

輸出: 3

解釋:
從 3 號加油站(索引為 3 處)出發(fā)秆撮,可獲得 4 升汽油四濒。此時(shí)油箱有 = 0 + 4 = 4 升汽油
開往 4 號加油站,此時(shí)油箱有 4 - 1 + 5 = 8 升汽油
開往 0 號加油站职辨,此時(shí)油箱有 8 - 2 + 1 = 7 升汽油
開往 1 號加油站盗蟆,此時(shí)油箱有 7 - 3 + 2 = 6 升汽油
開往 2 號加油站,此時(shí)油箱有 6 - 4 + 3 = 5 升汽油
開往 3 號加油站舒裤,你需要消耗 5 升汽油喳资,正好足夠你返回到 3 號加油站。
因此腾供,3 可為起始索引仆邓。

示例2:

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

輸出: -1

解釋:
你不能從 0 號或 1 號加油站出發(fā),因?yàn)闆]有足夠的汽油可以讓你行駛到下一個(gè)加油站伴鳖。
我們從 2 號加油站出發(fā)节值,可以獲得 4 升汽油。 此時(shí)油箱有 = 0 + 4 = 4 升汽油
開往 0 號加油站榜聂,此時(shí)油箱有 4 - 3 + 2 = 3 升汽油
開往 1 號加油站搞疗,此時(shí)油箱有 3 - 3 + 3 = 3 升汽油
你無法返回 2 號加油站,因?yàn)榉党绦枰?4 升汽油须肆,但是你的油箱只有 3 升汽油匿乃。
因此,無論怎樣休吠,你都不可能繞環(huán)路行駛一周扳埂。

提示:

如果題目有解,該答案即為唯一答案瘤礁。
輸入數(shù)組均為非空數(shù)組阳懂,且長度相同。
輸入數(shù)組中的元素均為非負(fù)數(shù)。

Java解法

思路:

  • 雖然不限起點(diǎn)岩调,但方向是有固定的 從i 到i+1巷燥,主要思路分兩步
    • 遍歷每一個(gè)起點(diǎn)
    • 判斷當(dāng)前出發(fā)是否滿足到達(dá)
  • 完成解法,但效率不是很好
package sj.shimmer.algorithm.m4_2021;

/**
 * Created by SJ on 2021/4/6.
 */

class D69 {
    public static void main(String[] args) {
        System.out.println(canCompleteCircuit(new int[]{1,2,3,4,5},new int[]{3,4,5,1,2}));
        System.out.println(canCompleteCircuit(new int[]{2,3,4},new int[]{3,4,3}));
    }
    public static int canCompleteCircuit(int[] gas, int[] cost) {
        int start = 0;
        while (start < gas.length) {
            if (go(start,gas,cost)>=0) {
                return start;
            }
            start++;
        }
        return -1;
    }
    public static int go(int start,int[] gas, int[] cost) {
        int length = gas.length;
        int sum = 0;
        for (int i = 0; i < length; i++) {
            sum +=gas[start]-cost[start];
            if (sum<0) {
                return -1;
            }
            start++;
            if (start>=length) {
                start = 0;
            }
        }
        return sum;
    }
}
image

官方解

https://leetcode-cn.com/problems/gas-station/solution/jia-you-zhan-by-leetcode-solution/

  1. 一次遍歷

    以我的思路為基礎(chǔ)進(jìn)行的優(yōu)化

    (官方解利用不等式計(jì)算出的關(guān)系)優(yōu)化基礎(chǔ)是如果x出發(fā)号枕,不能到達(dá)y的下一站缰揪,那么說明,x到y(tǒng)之間的所有加油站都無法到達(dá)(因?yàn)榈竭_(dá)的前提是有油或者為0葱淳,y不能到y(tǒng)+1钝腺,前面所有累加油都不夠,那部分累加油自然更加不夠)

    這樣就可以省去大量的不必要計(jì)算

    參考寫法

    public  int canCompleteCircuit(int[] gas, int[] cost) {
        int length = gas.length;
        int start = 0;
        while (start<length) {
            int arrive = 0;
            int sum = 0;
            while (arrive<length){
                int index = (start + arrive) % length;
                sum +=gas[index]-cost[index];
                if (sum<0) {
                    break;
                }
                arrive++;
            }
            if (arrive==length) {
                return start;
            }else {
                start = start+arrive+1;
            }
        }
        return -1;
    }
    
    image
    • 時(shí)間復(fù)雜度:O(N)

    • 空間復(fù)雜度:O(1)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赞厕,一起剝皮案震驚了整個(gè)濱河市艳狐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌皿桑,老刑警劉巖毫目,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诲侮,居然都是意外死亡镀虐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門沟绪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刮便,“玉大人,你說我怎么就攤上這事近零∨岛耍” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵久信,是天一觀的道長窖杀。 經(jīng)常有香客問我,道長裙士,這世上最難降的妖魔是什么入客? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮腿椎,結(jié)果婚禮上桌硫,老公的妹妹穿的比我還像新娘。我一直安慰自己啃炸,他們只是感情好铆隘,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著南用,像睡著了一般膀钠。 火紅的嫁衣襯著肌膚如雪掏湾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天肿嘲,我揣著相機(jī)與錄音融击,去河邊找鬼。 笑死雳窟,一個(gè)胖子當(dāng)著我的面吹牛尊浪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播封救,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼拇涤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兴泥?” 一聲冷哼從身側(cè)響起工育,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤虾宇,失蹤者是張志新(化名)和其女友劉穎搓彻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘱朽,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旭贬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搪泳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稀轨。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖岸军,靈堂內(nèi)的尸體忽然破棺而出奋刽,到底是詐尸還是另有隱情,我是刑警寧澤艰赞,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布佣谐,位于F島的核電站,受9級特大地震影響方妖,放射性物質(zhì)發(fā)生泄漏狭魂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一党觅、第九天 我趴在偏房一處隱蔽的房頂上張望雌澄。 院中可真熱鬧,春花似錦杯瞻、人聲如沸镐牺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睬涧。三九已至卒废,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宙地,已是汗流浹背摔认。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宅粥,地道東北人参袱。 一個(gè)月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像秽梅,于是被迫代替她去往敵國和親抹蚀。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 題目 在一條環(huán)路上有 N 個(gè)加油站企垦,其中第 i 個(gè)加油站有汽油 gas[i] 升环壤。 你有一輛油箱容量無限的的汽車,...
    CryFace閱讀 516評論 0 1
  • 在一條環(huán)路上有 N 個(gè)加油站钞诡,其中第 i 個(gè)加油站有汽油 gas[i] 升郑现。 你有一輛油箱容量無限的的汽車,從第 ...
    刻苦驢噥閱讀 285評論 0 0
  • 題目 在一條環(huán)路上有 N 個(gè)加油站荧降,其中第 i 個(gè)加油站有汽油 gas[i] 升接箫。 你有一輛油箱容量無限的的汽車,...
    迷茫的小程序員閱讀 365評論 0 1
  • 134 Gas Station 加油站 Description:There are N gas stations ...
    air_melt閱讀 197評論 0 0
  • 加油站: 在一條環(huán)路上有 N 個(gè)加油站朵诫,其中第 i 個(gè)加油站有汽油 gas[i] 升辛友。 你有一輛油箱容量無限的的汽...
    Buyun0閱讀 881評論 0 0