迭代
- 思路:
- 暴力模拟迭代;
- 假设从第 idx 个加油站开始,使用一个变量对行驶的加油站个数计数,如果最后行驶的个数为 size,则是可行的;
- 否则,行驶过的加油站都不可行;(加快更新 idx 重试)
- 是否可行,通过累计获取的汽油容量与消耗的容量进行比较,Sum(gas[i]) > Sum(cost[i]);
cpp
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int size = gas.size();
int idx = 0;
while (idx < size) {
int sumOfGas = 0;
int sumOfCost = 0;
int cnt = 0;
while (cnt < size) {
int j = (idx + cnt) % size;
sumOfGas += gas[j];
sumOfCost += cost[j];
if (sumOfCost > sumOfGas) {
break;
}
cnt++;
}
if (cnt == size) {
return idx;
} else {
idx = idx + cnt + 1;
}
}
return -1;
}
};