python之加油站

这篇博客探讨了如何解决一个环形公路上的加油站问题。题目要求判断一辆无初始油量的车能否从某一站出发,绕行一圈回到起点,其中每个加油站的加油上限和路段油耗已知。条件是每站加油后油量需足以行驶到下一站。博客提供了两种解决方案,包括直接检查条件和通过构建新数据结构进行遍历的方法。

1.贴题

题目来自PythonTip
加油站


一个环形的公路上有n个加油站,编号为0,1,2,…n-1,
每个加油站加油都有一个上限,保存在列表limit中,即limit[i]为第i个加油站加油的上限,
而从第i个加油站开车开到第(i+1)%n个加油站需要cost[i]升油,cost为一个列表。
现在有一辆开始时没有油的车,要从一个加油站出发绕这个公路跑一圈回到起点。
给你整数n,列表limit和列表cost,你来判断能否完成任务。
如果能够完成任务,输出起始的加油站编号,如果有多个,输出编号最小的。
如果不能完成任务,输出-1。


2.说明

原油箱里的油加上加油站能加到的上限的油大于消耗的油(每站都是)即可。

3.参考代码

flag = 0 #是否找到了最小编号加油站的flag,默认为假
res = [limit[i] - cost[i] for i in range(n)] #将上限列表和消耗列表逐个元素相减,得到差值列表
res = res * 2 #由于加油站为环形,因此现将差值列表扩展为两倍长度
for i in range(n): #模拟查找,从第一个开始找,找到最后一个
    m = res[i:i+n] #对差值列表进行切片,只取长度为n的部分
    p = 0 #开始油箱油量为空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值