想请教一下各位大佬能否帮我看一下此题我的解题思路错在哪里呢?
CODE 部分
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
/* 假设 汽车从 0 号加油站开始出发,此时汽车的汽油量就为 0 号汽油的 汽油量。
int start_idx=0;// 代表起始地址
int capicity=gas[0];//代表汽车中的含量
1。从0->1 若 汽车中的汽油量capcity 大于或等于 耗费的汽油cost,此时更新汽车中 汽油的含量:
pre_idx=(i-1+n)%n;
capcity=capcity-cost[pre_idx]+gas[i];. gas[i%(n-1)]为最后一个车站到0 号车站的油量 需要记录一个起始车站 ,结束条件为 i(到达车站)==起始车站
2. 若 0->1 汽车若 汽车中的汽油量capcity 大于或等于 耗费的汽油cost,此时更新 起始车站以及汽油含量cap
capicity = nums[i]
start_idx=i;
接下来依次遍历数组即可
*/
int start_idx=0;// 代表起始地址
int capcity=gas[0];//代表汽车中的含量
int n=gas.size();
int i=1;
int pre_idx=0;//前一个车站的下标
//printf("起始车站%d,剩余油量%d,到达下一站%d需要油量%d\n",start_idx,capcity,i,cost[0]);
while(i<n){
//需要判断一下 i=0 的时候 i-1就超出范围 此时前一个车站的下标通式就是:pre_idx=(i-1+n)%n;
pre_idx=(i-1+n)%n;
if(i==start_idx)// 即使准备到达起始站,也需要判断以下是否其有足够的油量让其到达
{
if(capcity>=cost[pre_idx])
return start_idx;
else
break;
}
if(capcity>=cost[pre_idx]){ // 去往 i 号汽油站所需汽油 ,此时只需要判断当前结点能否形成一个环,不需要将所有的结点进行判断。
capcity=capcity-cost[pre_idx]+gas[i];
printf("起始车站%d,此时车辆到达%d站,剩余油量%d",start_idx,i,capcity);
}
else{ //小于的话 就从 i 开始出发
capcity=gas[i];
start_idx=i;
}
i=(i+1)%n; // i 如何更新
// printf("i=%d",i);
printf("起始车站%d,剩余油量%d,到达下一站%d需要油量%d\n",start_idx,capcity,i,cost[pre_idx]);
}
return -1;
}
};