问题:
假设有一个圆圈。那个圆圈上有 n 个汽油泵。给你两组数据。
- 汽油泵将提供的汽油量。
- 从那个汽油泵到下一个汽油泵的距离。
计算卡车能够完成圆圈的第一个点
我刚刚解决了这个问题。我想知道我是否正确解决了问题。
算法:
我从起点开始,我尝试添加剩余的汽油离开行驶的距离。如果值 < 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];
}
}