思路
对于这个题目,脑海中首先想到贪心这个算法,但是捏,由于本人太菜了,了解还不深刻,选择使用数组遍历。
条件
1.获得的汽油的量大于总油耗
2.车从i站能开到i+1
只要满足这俩条件,就有了哥.
解释
当cur小于0时,表明从ans位置出发到i位置为死路,这表明我们无法再进行下一步,所以我们切换思路,此时应将cur置零,ans改为i+1 如果最后total>= 0 即ans位置出发就满足题目说的要求,则返回ans,否则返回 -1.
补充
为什么当cur<0时应该将起始站点设为i+1?
因为i->i+1站耗油太大,此时设置起点站为i+1能解决这个问题,减少一站,剩余油量就更少,如果设置起点站为i前面的站点,那包不可能冲过i+1的.
```int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize){
// total记录可获得的总油量-总油耗, cur记录当前油耗情况, ans记录出发位置
int total = 0, cur = 0, ans = 0;
for(int i=0;i<gasSize;i++)
{
total += (gas[i] - cost[i]);
cur += (gas[i] - cost[i]);
if(cur<0)
{
cur = 0;
ans = i + 1;
}
}
return total<0?-1:ans;
}