ガソリンスタンドのガソリンスタンドの問題

2019年6月1日午前17時09分30秒

問題の説明:

問題解決:

実際には、これは自然に数学の問題です。

[定理]

円の周りに配列、この配列要素から、非負の状態の保証を蓄積することができた:配列をループするため、全体のアレイとSUM> = 0の場合、そこ配列におけるそのような要素を見つけなければなりません。

[証明]

真ん中のための第1および図からスタートし、最小の累積ポイントがなければならない、我々は、xを設定します。最終合計> = 0。

今、私たちは、その後の状態で非負が存在する必要があり、バックのx蓄積からであり、最後のサイトにいくつかの余剰があるでしょう、その後、負の数にバインドすることは、最低点xマーチングから開始することは表示されません。

【Leetcode議論】

すべての合計が場合  gas[i]-cost[i] 以上に等しく  0、その後、あなたは全体の円を移動することができ、開始位置があります。
ましょう  i 、そのような部分和、そのインデックスも

gas[0]-cost[0]+gas[1]-cost[1]+...+gas[i]-cost[i]

最小で、その後、開始位置はでなければならない  start=i+1 (  start=0 場合  i=n-1)。例えば、他の部分和を考えてみましょう、

gas[0]-cost[0]+gas[1]-cost[1]+...+gas[i]-cost[i]+gas[i+1]-cost[i+1]

以来  gas[0]-cost[0]+gas[1]-cost[1]+...+gas[i]-cost[i] 最小で、我々は持っている必要があります

gas[i+1]-cost[i+1]>=0

ためには  gas[0]-cost[0]+gas[1]-cost[1]+...+gas[i]-cost[i]+gas[i+1]-cost[i+1] 大きいこと。
同じ理由であること与えます

 gas[i+1]-cost[i+1]>=0
 gas[i+1]-cost[i+1]+gas[i+2]-cost[i+2]>=0 ....... gas[i+1]-cost[i+1]+gas[i+2]-cost[i+2]+...+gas[n-1]-cost[n-1]>=0 

どのようなラップアラウンド部分和のためには?

gas[0]-cost[0]+gas[1]-cost[1]+...+gas[j]-cost[j] + gas[i+1]-cost[i+1]+...+gas[n-1]-cost[n-1] >= gas[0]-cost[0]+gas[1]-cost[1]+...+gas[i]-cost[i] + gas[i+1]-cost[i+1]+...+gas[n-1]-cost[n-1] >=0

最後の不平等は全体の合計があるという仮定に起因して  gas[k]-cost[k] 0以上である
ので、我々はすべての部分和することを持っています

gas[i+1]-cost[i+1]>=0,
gas[i+1]-cost[i+1]+gas[i+2]-cost[i+2]>=0, gas[i+1]-cost[i+1]+gas[i+2]-cost[i+2]+...+gas[n-1]-cost[n-1]>=0, ... gas[i+1]-cost[i+1]+...+gas[n-1]-cost[n-1] + gas[0]-cost[0]+gas[1]-cost[1]+...+gas[j]-cost[j]>=0, ...

このように  i+1 開始する位置です。

あなたが発生した場合、状況はその後、到達できない、コスト> = 0 yesの場合、唯一の配列を反復処理する必要があり、この文脈では、解決策が存在しなければならない - ?したがって、この問題のために、我々はガスの合計かどうかを計算することができます再びスタートに到達することはできません最初から計算することができます。

    公共INT canCompleteCircuit(INT []ガス、INT []コスト){ 
        int型のn = gas.length。
        int型の合計= 0; 
        [i]はコスト-総和+ =気体[i]は、式(I ++; iがN <I = 0 INT)のため 
        (和<0)を返す場合は-1。
        INT = 0を起動します。
        int型のタンク= 0; 
        以下のために(INT i = 0; iがn <; iは++){ 
            タンク+ =気体[I]。
            場合(タンク<コストは[I]){ 
                START = I + 1。
                タンク= 0; 
            } 
            他{ 
                タンク- =コスト[i]は、
            } 
        } 
        開始返します。
    }

  

 

おすすめ

転載: www.cnblogs.com/TIMHY/p/10960312.html