There are N gas stations along a circular route, where the amount of gas at station iisgas[i].
You have a car with an unlimited gas tank and it costscost[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.
设置一个left剩余油,一个标志lack缺的油
在某一站,对于到达下一站后剩的油:left += gas[i]-cost[i] 从头遍历站点数组,若left一直大于等于0,就可以到达下一站,就可以继续累加,说明不是起点,若left小于0,说明不能到达,就累加欠下的油,并以下一站为起始点,到最后检查剩余的油量是不是大于欠下的油量.
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int res(0),left(0),lack(0);
int len = gas.size();
for(int i=0;i<len;++i)
{
left += gas[i]-cost[i];
if(left<0)
{
lack+=left;
left=0;
res=i+1;
}
}
return (left+lack)<0?-1:res;
}