分析
i从第一个加油站开始模拟,如果j回到了i处,说明满足条件,如果j<i说明j到达了i之前的位置,那么此时j->i不可达,那么直接返回-1,如果j>i说明i->j是可以到达的,直接更新i到j。
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int n=gas.size();
for(int i=0;i<n;i++){
int j=i;
int cur=gas[j];
while(cur>=cost[j]){
cur=cur-cost[j]+gas[(j+1)%n];
j=(j+1)%n;
if(j==i)return i;
}
if(i>j)return -1;
i=j;
}
return -1;
}
};