问题:城市的环形路有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.csdn.net/a83610312/article/details/11726443