本题源自LeetCode
=--------------------------------------------------------------------------------------
1 定一个起始站start
2 如果油量充足就向前走 end++ 否则就倒退一站。
3 记录每站的消耗,不浪费已经遍历过的
从尾开始
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int start=gas.size()-1;
int end=0;
int sum=gas[start]-cost[start];
while(start>end){
if(sum>=0){
//可以向前走
sum+=gas[end]-cost[end];
end++;
}else{
start--;
sum+=gas[start]-cost[start];
}
}
return sum>=0 ? start:-1;
}
从头开始
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int len=gas.size();
int remain=0;
int sum=0;
int index=0;
for(int i=0;i<len;i++){
sum += gas[i]-cost[i];
remain += gas[i]-cost[i];
if(remain<0){
//表示这站到不了下一站,则结果可能是下一站
index=i+1;
remain=0;
}
}
return sum>=0 ? index:-1;
}