题目:
给两个数组,一个gas,一个cost,在i加油站你可以获得gas[i]的油,而从i→i+1需要消耗cost[i]的油,问在某个加油站出发,是否能走一个圈回到原加油站。
思路:
首先判断能不能回到,很简单只要把gas[],cost[]求和,如果gas数组的和大于cost数组的和,那么肯定存在一条路径的。关键就是怎么找到这条路径。
在这些加油站走一圈,我们知道,肯定会有的站亏损油量(cost[i]>gas[i]),有的站增加油量(gas[i]>cost[i])。若已知有且只有一个正确的起点,那么在这段路的尾部的一个或多个加油站一定是亏最多的,因为起点的作用就是在一开始攒尽量多的油去给最后的加油站去亏损。所以只要从0开始遍历数组,找到亏损最多的路段,亏损最多的路段的下一个加油站就是起点。
代码:
class Solution: def canCompleteCircuit(self, gas, cost): i,result,dst,_min = 0,0,-1,0 while i < len(gas): result += gas[i]-cost[i] if result < _min: dst = (i+1)%len(gas) _min = result i += 1 if result >= 0: return dst else: return -1