- 加油站问题,每个加油站可以加的油给出来,从当前当下一个加油站会消耗的汽油量给出来了,求从哪个站点出发可以循环加油站一圈。
- 首先可以使用一个二重循环来完成,这样复杂度为N^2:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
for(int i = 0; i < gas.size(); ++i){
int j = i;
int curGas = gas[j];
while(curGas >= cost[j]){
curGas -= cost[j];
j = (j+1)%gas.size();
curGas += gas[j];
if(curGas < 0)
break;
if(j == i)
return i;
}
}
return -1;
}
};
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int totalGas = 0;
int sum = 0;
int sz = cost.size();
int start = 0;
for(int i = 0; i < sz; ++i){
totalGas += gas[i] - cost[i];
sum += gas[i] - cost[i];
if(sum < 0){
start = i + 1;
sum = 0;
}
}
if(totalGas < 0)
return -1;
return start;
}
};