方法一:直接暴力方法
解题思路:
当 gas[i] >= cost[i] 时,这个加油站才可能是个出发点,遍历gas容器(数组),当出现 gas[i] >= cost[i] 时,看看以这个加油站为出发点,是否满足条件,即执行函数whetherEnough,如果满足,就得到结果了,返回索引 i 即可,否则,继续寻找下一个可能的出发点。
在whetherEnough函数中,因为是个环形线路,所以先访问 i 后面的加油站,再访问 i 前面的加油站。中途一旦遇到剩余的油量为负,则这条路不通,返回false。
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
//遍历gas和cost,gas[i] >= cost[i]的时候,i才可能为出发的加油站编号
for(int i = 0; i < gas.size(); i++){
if(gas[i] >= cost[i]){ //可能是个出发点
if(whetherEnough(i, gas, cost)) return i;
}
}
return -1;
}
bool whetherEnough(int n, const vector<int>