标签:leetcode
方法1:
1. 每一站的代价为gas-cost, 也就是求从哪一站开始累加代价和总是大于0。
2. 如果所有站的代价和大于0,则所求的路线必定存在。
如果总代价〉=0,从序号0开始求代价和,如果代价和小于0,则不是从本站或者本站之前的某一个代价大于0的站开始,必从下一站即之后的站开始,而且这样的站必定存在。
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;
}
};标签:leetcode
原文地址:http://blog.csdn.net/u011409995/article/details/39053451