LeetCode Task29. 加油站

题目

134. 加油站
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

说明:
如果题目有解,该答案即为唯一答案。
输入数组均为非空数组,且长度相同。
输入数组中的元素均为非负数。
在这里插入图片描述
在这里插入图片描述

解答

代码

class Solution(object):
    def canCompleteCircuit(self, gas, cost):
        """
        :type gas: List[int]
        :type cost: List[int]
        :rtype: int
        """
        w=len(gas)
        for i in range(w):
            if gas[i]<cost[i]:
                continue
            mark=i
            j=mark
            save=0
            for k in range(w):
                save=save+gas[j]-cost[j]
                if save<0:
                    break
                if save>=0 and (j+1)%w==mark:
                    return mark
                j=(j+1)%w
        return -1

思路

有点近似暴力法

  • 第一层循环为寻找满足最开始条件的出发点,即一开始加油站的油足够跑完下一段路程即可
  • 第二层循环即在已知出发点的情况下让车开始一个个加油站遍历行驶:
    • 当油供应不足时则返回-1
    • 当油量充足且能到达原出发点的时候,便返回出发点的位置。

在此完成之后,去看了题解里的双指针法,的确更高效,理解完因为时间原因暂且先不做双指针法的练习了。

结果

O(n²)
在这里插入图片描述