从i
到i+1
需要gas[i]-cost[i]>=0
;
从i
到i+2
需要gas[i]-cost[i]+gas[i+1]-cost[i+1]>=0
;
以此类推
一旦有一个点不符合条件,就该点的下一个点为起点。
以出发点为分界线可以分为2部分,[0…i-1]的gas[0]-cost[0]+...+gas[i-1]-cost[i-1]<0
与[i…n]的gas[i]-cost[i]+...+gas[n]-cost[n]>=0
并且gas[0...n]-cost[0...n]>=0
,因此后半段剩余的油一定比前半段亏的油要多。所以i能到n就一定能从n到i-1。
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int totalTank=0,curTank=0,startPoint=0;
for(int i=0;i<gas.size();++i){
int sub = gas[i]-cost[i];
totalTank += sub;
curTank += sub;
if(curTank<0){
curTank = 0;
startPoint = i+1;
}
}
return totalTank>=0?startPoint:-1;
}