测试:gas=1,2,3,4,5 cost=3,4,5,1,2
gas=3,4,2 cost=3,4,3
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int size=gas.size();
int *Save=new int[size];
for(int i=0;i<size;i++){
Save[i]=gas[i]-cost[i];
}
for(int i=0;i<size;i++){
if(Save[i]>=0){
int j=i+1;
int circle_j=j%size;//注意是循环操作
int sum=Save[i]+Save[circle_j];
while(sum>=0){
circle_j=(circle_j+1)%size;
sum+=Save[circle_j];
if(i==circle_j){
return i;
}
}
}
}
return -1;
}
别人的版本:(不知道为啥)
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int lowest = INT_MAX, n=gas.size(), tank=0, index;
for(int i=0;i<n;i++){
tank=tank+gas[i]-cost[i];
if(tank<lowest){
lowest=tank;
index=i+1;
}
}
return (tank<0)?-1:(index%n);
}