Leetcode 134. 加油站 Python3实现
无脑暴力法,虽然效率不高但是比较好理解,本菜鸡暂时也只能想到这种解法,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!
Python3代码如下:
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
# 记录从当前出发点开始,到下一个出发点剩余的油量
sub = []
for i in range(len(gas)):
sub.append(gas[i] - cost[i])
# 将从当前出发点开始,到下一个出发点剩余的油量大于或等于0的点记录下来,小于0的说明从该加油站出发第二个加油站都到不了不用考虑
posb = []
for j in range(len(sub)):
if sub[j] >= 0:
posb.append(j)
# 暴力遍历所有可能的出发点
for z in posb:
flag = 1
oil_acc = 0 # 当前累计油量
new_road = sub[z:] + sub[:z] # 构建当前情况回到原点的跑道
# 遍历跑道的每个加油站,只要当前累计油量不小于0,就可以一直往前跑
for d in new_road:
oil_acc += d
# 小于0说明从该点出发行不通,直接break并赋予flag为0
if oil_acc < 0:
flag = 0
break
# 如果遍历完一次内循环,此时flag仍为1,那说明从该点出发能跑完一圈,返回该点的索引即可
if flag == 1:
return z
# 如果遍历完所有可能的出发点,仍没有找到能跑完全程的出发点,则返回-1
return -1