题目:
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
如果题目有解,该答案即为唯一答案。
输入数组均为非空数组,且长度相同。
输入数组中的元素均为非负数。
我的思路:
用tried数组记录每个点是否遍历过
begin记录本次遍历的出发加油站
current记录当前加油站
last记录从begin到current的累计剩余油量
当last<0时,则说明begin到current的点都不可行(这个范围的点tried都设置成True),从current+1开始遍历
为了解决环的问题,current每次+1都对n求余
#!/usr/bin/env python3.6
# _*_coding:utf-8 _*_
# @Time : 2019/10/25 21:36
# @Author : Grey
from typing import List
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
n = len(gas)
if n == 0 or (n == 1 and gas[0] >= cost[0]):
return 0
if n == 1 and gas[0] < cost[0]:
return -1
# station = [-1 for _ in range(n)]
tried = [False for _ in range(n)]
res = False
begin = 0
current = 0
last = 0
while tried[begin] == False:
last = gas[current] - cost[current] + last
if last >= 0:
current = (current + 1) % n
if current == begin:
res = True
break
else:
if begin > current:
current = current + n
for i in range(begin, current+1):
tried[i % n] = True
begin = (current + 1) % n
current = begin
last = 0
return begin if res else -1
if __name__ == "__main__":
gas = [2, 3, 4]
cost = [3, 4, 3]
print(Solution.canCompleteCircuit("self", gas, cost))

本文探讨了一辆油箱容量无限的汽车如何在环路加油站中找到出发点,以完成一圈行驶的问题。通过遍历算法,记录每个加油站是否尝试过,并计算从起点到当前加油站的累计剩余油量,来判断是否存在可行的解决方案。
1559

被折叠的 条评论
为什么被折叠?



