问题:城市的环形路有n个加油站,第i个加油站的油量用gas[i]来表示,你有如下的一辆车:
它的油缸是无限量的,初始是空的
它从第i个加油站到第i+1个加油站消耗油量为cost[i]
现在你可以从任意加油站开始,路过加油站可以不断的加油,问是否能够走完环形路。如果可以返回开始加油站的编号,如果不可以返回-1。
https://leetcode.com/problems/gas-station/
思路:
假设起始的加油站是src,最后一个加油站是dst,在从src出发达到下一个加油站的油剩下sum。那么需要能够从src到dst中的每个点的油剩余量都有>=0。
假设从src出发,某点的油量sum<0,那么我们就从src-1站出发,此时达到这个“某点”的油量剩余就是sum += gas[src-1]-cost[src-1],此时的dst将是src -1 再 -1。
code:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int src = 0;
int dst = (src-1+gas.size())%gas.size();;
int sum = 0;
int i = src;
while(i != dst +1){
if(sum<0){
src = (src-1+gas.size())%gas.size();
dst = (src-1+gas.size())%gas.size();
sum+=gas[src] - cost[src];
}
else {
sum += gas[i] - cost[i];
i++;
}
}
if(sum>=0) return src;
else return -1;
}
};
参考:http://blog.youkuaiyun.com/a83610312/article/details/11726443