134. Gas Station
题目来源
https://leetcode.com/problems/gas-station/description/
题意分析
给定一个圈,可以从圈的任何一个位置开始,
在位置i可以获得gas[i]的能量,从i到位置i+1需要消耗cost[i]的能量,
若能够按顺时针走一圈,输出初始位置,否则输出-1
(若有解,保证解是唯一的)
题目思路
从位置0开始,若能绕一圈,则0就是最终答案
若在某个位置i时,能量值为负,那么说明这一段消耗的能量为负,
又一开始的能量为正,则必然这一段中的任何一个位置不能作为起点
因此,尝试将位置i+1作为新的起点,并记录之前亏欠的油量,
若能走到最后,并且之后积累的油量大于之前亏欠的油量,则i+1即为答案,否则输出-1
若在另一个位置j能量值达到负,则重复上述过程
代码
class Solution:
def canCompleteCircuit(self, gas, cost):
"""
:type gas: List[int]
:type cost: List[int]
:rtype: int
"""
n = len(gas)
sum,s,own = 0
for i in range(n):
sum += gas[i]-cost[i]
if sum < 0:
s = i+1
own += sum
sum = 0
if sum+own>=0:
return s
return -1