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.
题意:有一个环形的加气站分布,总共有N个加气站,假设有一辆气箱容量无限大的汽车,它从第i站到第i+1站的耗气为cost[i],当前气站的量为gas[i]。问:汽车能否沿这个环走一遍,如果可以,要从第几个站开始?否则,返回-1.
以我的理解,主要需要注意的有以下几点:
1)计算每个站的气的盈余,即gas[i]-cost[i].
2)若上述的盈余总量为负,则一定不能行驶一圈,返回-1.
3)否则,一定可以行驶一圈,这个时候开始由第一个站累计每个气站的盈余,如果出现负数的情况,则表明由之前的气站开始不能行驶一圈,需要重新计算,并保存开始的位置。只要不再出现负数的情况,那么这个起点就是可取的,结果返回这个油站的位置。
class Solution {
public:
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
if(gas.empty()||cost.empty())
return -1;
vector<int> reminder;
for(int i=0;i<gas.size();i++)
{
reminder.push_back(gas[i]-cost[i]);
}
int count=0;
for(int i=0;i<gas.size();i++)
{
count+=reminder[i];
}
if(count<0)
return -1;
int index=-1;
int max=0;
int sum=0;
for(int i=0;i<reminder.size();i++)
{
sum+=reminder[i];
if(sum<0)
{
sum=0;
index=i;
}
}
return index+1;
}
};