Gas Station

题目描述:在一个环形路上有n个加油站,每个加油站i 的油量为gas[i],你有一个无限大的油箱,从一个加油站i到下一个加油站i+1消耗油量cost[i],你从一个加油站开始,并且油箱没有油,如果能够绕环形路一圈,返回开始加油站的索引,否则返回-1.

分析:要保证能够行走一圈,则所有站的油量之和一定要大于行走一圈所消耗的油量。满足这个条件后,我们要找到出发位置,我们可以计算出每到达一个加油站后剩余的油量,如果我们以剩余油量最小的那个加油站为起点,由题意知道起点的剩余油量为0,则其他位置的剩余油量一定都大于0,即一定可以到达其他所有的加油站。代码如下:

 1 int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
 2         int index = 0, mid = 0, leftgas = 0;
 3         int length = gas.size();
 4         for(int i = 1; i<=length;i++)
 5         {
 6            leftgas += gas[i-1] - cost[i-1];
 7            if(leftgas<mid)
 8            {
 9                index = i;
10                mid = leftgas;
11            }
12         }
13         return leftgas>=0?index:-1;
14     }
原文地址:https://www.cnblogs.com/zhulong890816/p/4660648.html