問題:汽油泵圓形遊
假設有一個圓。那個圓上有幾個汽油泵。 給你兩組數據。
- 汽油泵給予的汽油數量。
- 從該汽油泵到下一個汽油泵的距離。
計算從第一點卡車就能完成 圓
我只是解決了這個問題。我想知道我是否正確解決了問題。
算法:
我從起點開始,我嘗試添加汽油的其餘部分向左傳播的距離。如果值爲< 0,並且如果我們再次啓動,則不存在解決方案。否則保持循環,直到你到達最後。結束始終是開始+ 1;我也知道算法O(n)。有人可以用一個好的邏輯來解釋它的O(n)。
int PPT(int P[], int D[], int N)
{
int start = 0, end = 1, cur_ptr = P[0] - D[0], i = start;
while(start != end)
{
if(cur_ptr < 0)
{
start = (i + 1) % N;
end = (start + 1) % N;
cur_ptr = 0;
if(start == 0) return -1; // if start again becomes 0 then no solution exists
}
i = (i + 1) % N;
cur_ptr += P[i] - D[i];
}
}
我假設'P []'是泵的給定量,'D []'是從該泵到下一個泵的距離。你能解釋一下'cur_ptr'是什麼?以及你如何計算汽油的行駛距離? – Thanushan
我可以假設'P []'包含用戶有足夠汽油的距離嗎?這將使得比較'D []'和'P []'更容易。 – akaHuman
[卡車在加油站周圍移動的算法可能重複](http://stackoverflow.com/questions/2286849/algorithm-for-truck-moving-around-a-circle-of-gas-stations) –