leetcode-134. 加油站
题目:
代码:
#include <iostream>
#include <vector>
using namespace std;
/*
如果x到不了y+1(但能到y),那么从x到y的任一点出发都不可能到达y+1。因为从其中任一点出发的话,相当于从0开始加油,
而如果从x出发到该点则不一定是从0开始加油,可能还有剩余的油。既然不从0开始都到不了y+1,那么从0开始就更不可能到达y+1了
*/
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int n=gas.size();
int i=0; //从第i个点出发
int cnt=0; //判断是否已经行驶了n个加油站
int sumgas=0,sumcost=0;
while(i<n){
sumgas=0;sumcost=0;cnt=0;
while(cnt<n){
int j=(i+cnt)%n;
sumgas+=gas[j];
sumcost+=cost[j];
if(sumgas<sumcost){
break;
}
cnt++;
}
if(cnt==n){
return i;
}else{
i=i+cnt+1;
}
}
return -1;
}
int main(){
int res;
vector<int> gas;
vector<int> cost;
int n,tn;
cin>>n;
for(int i=0;i<n;i++){
cin>>tn;
gas.push_back(tn);
}
for(int i=0;i<n;i++){
cin>>tn;
cost.push_back(tn);
}
res=canCompleteCircuit(gas, cost);
cout<<res;
return 0;
}