class Solution {
public:
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
// Note: The Solution object is instantiated only once.
int total = 0;
int currentgas = 0;
int startpoint = -1;
int sz = gas.size();
for(int i = 0; i < sz; i++)
{
currentgas += gas[i] - cost[i];
total += gas[i] - cost[i];
if(currentgas < 0)
{
startpoint = i;
currentgas = 0;
}
}
return total >= 0 ? startpoint+1 : -1;
}
};
方法2:
class Solution {
public:
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int len = gas.size();
int tank_all = 0;
int pos = 0;
int tank_cur =0;
for (int i = 0; i < len; i++){
int tank_remain = gas[i] - cost[i];
if (tank_cur >= 0){
tank_cur += tank_remain;
}
else{//find a new start .restart
tank_cur = tank_remain;
pos = i;
}
tank_all += tank_remain;
}
return tank_all >= 0 ? pos : -1;
}
};