您的位置:首页 > 其它

沿着循环路线有N个加油站,其中i站的天然气量是[i]。你有一辆带有无限气罐的汽车,并且它的费用是从i站到我的下一站(i + 1).如果您可以绕电路行驶一次,则返回起始站索引

2017-10-07 09:44 633 查看
本题源自LeetCode

=--------------------------------------------------------------------------------------

1 定一个起始站start

2 如果油量充足就向前走 end++  否则就倒退一站。

3 记录每站的消耗,不浪费已经遍历过的

从尾开始

int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int start=gas.size()-1;
int end=0;
int sum=gas[start]-cost[start];
while(start>end){
if(sum>=0){
//可以向前走
sum+=gas[end]-cost[end];
end++;
}else{

4000
start--;
sum+=gas[start]-cost[start];
}
}
return sum>=0 ? start:-1;
}

从头开始
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
int len=gas.size();
int remain=0;
int sum=0;
int index=0;
for(int i=0;i<len;i++){
sum += gas[i]-cost[i];
remain += gas[i]-cost[i];
if(remain<0){
//表示这站到不了下一站,则结果可能是下一站
 index=i+1;
remain=0;
}
}
return sum>=0 ? index:-1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐