leetcode第134题,加油站问题,每个加油站加油量和前进至下一个加油站的消耗量都给出,判断从哪一点开始可以完成一圈的行驶。
显而易见的是,如果所有加油站的供油量小于消耗量,那么肯定是走不完一圈的,这就是判断是否返回-1的依据。除此以外,我们可以判定车是可以跑完全程的,只是从哪一点开始的问题。换个角度考虑,如果在某段路程中,油箱的油量小于了加油量,意味着它走不到下一个加油站,此时从第一个开始到这个点就走不完,因此起点需要重新设置。这里有一个技巧是,初始站点设置为-1,这样即使只有一个站,也可以自动地满足要求,返回就是0.
class Solution(object):
def canCompleteCircuit(self, gas, cost):
"""
:type gas: List[int]
:type cost: List[int]
:rtype: int
"""
n = len(gas)
total = 0
singleSum = 0
start = -1
for i in range(n):
singleSum += gas[i]-cost[i]
total += gas[i]-cost[i]
if singleSum < 0:
start = i
singleSum = 0
if total < 0:
return -1
else:
return start+1