(leetcode刷题)
加油站
题目: 在一条环路上有 N
个加油站,其中第 i
个加油站有汽油 gas[i]
升。你有一辆油箱容量无限的的汽车,从第 i
个加油站开往第 i+1
个加油站需要消耗汽油 cost[i]
升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1
。
- 如果题目有解,该答案即为唯一答案
- 输入数组均为非空数组,且长度相同
- 输入数组中的元素均为非负数。
示例: 输入: gas = [1,2,3,4,5],cost = [3,4,5,1,2]
;输出:3
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 4 升汽油。经过4,0,1,2,3号加油站,油箱分别有8,7,6,5升汽油,最后回到3号加油站。
方法
- 我的思路:外循环加内循环。内循环计算一圈的值,外循环遍历所有加油站。
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
lens=len(gas)
for i in range(lens):
if gas[i]<cost[i]:
continue
oil,num,j=gas[i],0,i
while num<lens:
oil-=cost[j]
if oil<0:break
if oil>=0 and num==lens-1:return i
j=j+1 if j!=lens-1 else 0
oil+=gas[j]
num+=1
return -1
- 官方有更好的解法