暴力的方法需要O(n*n)的时间复杂度,即挨个使每个加油站作为起点,进行尝试。
改进的方法:先要对整体进行判断,即加油站油总量大于需要消耗的油的总量,则一定可以。
每当累积的油量不足以消耗,则当从该站的下一站作为起点,也就是说,这样的站点,尽量放在后边。遍历一次即可。
class Solution {
public:
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int start=0;
int gasSum=0;
int costSum=0;
int total=0;
int sum=0;
for(int i=0;i<gas.size();i++){
gasSum+=gas[i];
costSum+=cost[i];
}
if(gasSum<costSum) return -1;
for(int i=0;i<gas.size();i++){
sum+=gas[i]-cost[i];
if(sum<0){
start=(i+1)%cost.size(); sum=0;
}
}
return start;
}
};