Leetcode 134. 加油站(无脑暴力法,详细注释!)

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值