class Solution {
public:
inline int transId(const int id, const int size){
return id % size;
}
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int size = gas.size();
int idx = 0;
int left = 0;
for(; idx < size; ++idx){
left += gas[idx] - cost[idx];
}
if(left < 0){
return -1;
}
idx = 0;
int cntstation = 0;
left = 0;
int rec = 0;
for(; idx < 2 * size; ++idx){
int tmpidx = transId(idx, size);
left += gas[tmpidx] - cost[tmpidx];
if(left >= 0){
++cntstation;
if(cntstation >= size){
rec = rec % size;
return rec;
}
}
else{
while(transId(rec, size) != transId(tmpidx + 1, size) && left < 0){
left -= gas[transId(rec, size)] - cost[transId(rec, size)];
rec++;
rec %= size;
}
}
}
}
};
借鉴了minimum window的思路~