解题思路:
容易想到从x加油站出发经过z加油站到y加油站,在每个加油站都进行加油,再将每段路程消耗的油量汇总,如果加油的汇总大于消耗的汇总,那么可以在x位置到达y位置,如果是小于的话,证明在x到y的路程中,无论是从x出发还是从x到y的路程中的任意站出发,都不能到达y站。
所以从判断条件为gas是否大于
cost,若大于则进行计数,若小于则break跳出循环,通过上述循环后,判断计数是否可以循环一个数组回到原位置,若能则返回i,若不能则从上述说的y+1处进行新的循环(i= i+cnt+1)。
代码:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int n = gas.size();
int i = 0;
while (i < n) {
int sumOfGas = 0, sumOfCost = 0;
int cnt = 0;
while (cnt < n) {
int j = (i + cnt) % n;
sumOfGas += gas[j];
sumOfCost += cost[j];
if (sumOfCost > sumOfGas) {
break;
}
cnt++;
}
if (cnt == n) {
return i;
} else {
i = i + cnt + 1;
}
}
return -1;
}
};