原题链接:https://leetcode.com/problems/gas-station/
题意:
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]
.
You have a car with an unlimited gas tank and it costs cost[i]
of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations.
Return the starting gas station's index if you can travel around the circuit once, otherwise return -1.
Note:
The solution is guaranteed to be unique.
解析:假设E[i][k] (k<=n)表示从i开始走k个station后,剩余的油量
那么 E[i][k]=0,if k=0;
E[i][k]=gas_earn[i]+gas_earn[i+1]+...+gas_earn[i+k-1] if 0<k<=n
其中 gas_earn[i]=gas[i%n]-cost[i%n],k=0,1,...,n
问题转化为 找到一个i,使得 E[i][k]>=0,k=0,1,...,n
另外 该问题 当 sum(gas[0,...,n-1])>=sum(cost[0,...n-1]) 时候 ,问题有解。 否则返回-1.
代码如下:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
const int n = gas.size();
int pre = 0;
int curr_sum = 0;
int total = 0;
for(int i = 0;i<n;++i){
total+=gas[i]-cost[i];
curr_sum+=gas[i]-cost[i];
if(curr_sum<0){
curr_sum=0;
pre = i+1;
}
}
if(total<0)
return -1;
else
return pre;
}
};