个人思路:能想到类似滑动窗口,对于每个元素i,判断最远能到哪里,如果中途汽油为负,则从负的这个点的下一个地方开始重新判断
遇到困难:想判断的是最后的落点 j 能否循环到 i ,但是这样对于10**5长度的数组会超时,看了题解思路,想到应该判断走过的路程是否为gasSize
C
int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {
int i=0;
while(i<gasSize){
int run=0;
int sum=0;
while(run<gasSize){
int j = (i+run)%gasSize;
sum+=(gas[j]-cost[j]);
if(sum<0){
break;
}
run++;
}
if(run == gasSize){
return i;
}else{
i = i+run+1;
}
}
return -1;
}