首先,构造一个新的容器,其值为每个加油站的最大油量与到达下一个加油站的净剩值,同时再复制一遍添加到末尾(以方便处理环形的结构)
接着,开始双重循环。
第一重确定起始位置,第二重开始遍历一圈,如果发现累计的净剩值小于0,说明不能从该位置开始,跳出第二重循环
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
vector<int> cw;
int i,j,n=gas.size(),sum=0;
for(i=0;i<n;i++)
cw.push_back(gas[i]-cost[i]);
cw.insert(cw.end(),cw.begin(),cw.end());
for(i=0;i<n;i++)
{
if(cw[i]<0)
continue;
sum=0;
for(j=i;j<i+n;j++)
{
sum+=cw[j];
if(sum<0)
break;
}
if(j>=i+n)
return i;
}
return -1;
}
};
思路简单,不过从运行时间的效果看不好……