关键思路:我们很容易想到依次遍历每个加油站来看看其是否符合条件,但这需要的算法复杂度,这无法接受,所以需要进一步改进。
改进:每次从油量不够的油站重新作为初始点出发,算法复杂度O(n)。
这是一种典型的贪心思维:即从无法再坚持处重新坚持
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
if sum(cost) > sum(gas): return -1
n = len(cost)
cost = [gas[i] - cost[i] for i in range(len(cost))]
j = 0
while(j < n):
curr = cost[j]
if curr < 0:
j+=1
continue
k = (j + 1) % n
while(k!=j):
if curr < 0:
break
curr += cost[k]
k = (k + 1) % n
if k == j and curr >= 0:
return j
j = max(j+1,k)
return -1