LeetCode Task29. 加油站

题目

134. 加油站
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

说明:
如果题目有解,该答案即为唯一答案。
输入数组均为非空数组,且长度相同。
输入数组中的元素均为非负数。
在这里插入图片描述
在这里插入图片描述

解答

代码

class Solution(object):
    def canCompleteCircuit(self, gas, cost):
        """
        :type gas: List[int]
        :type cost: List[int]
        :rtype: int
        """
        w=len(gas)
        for i in range(w):
            if gas[i]<cost[i]:
                continue
            mark=i
            j=mark
            save=0
            for k in range(w):
                save=save+gas[j]-cost[j]
                if save<0:
                    break
                if save>=0 and (j+1)%w==mark:
                    return mark
                j=(j+1)%w
        return -1

思路

有点近似暴力法

  • 第一层循环为寻找满足最开始条件的出发点,即一开始加油站的油足够跑完下一段路程即可
  • 第二层循环即在已知出发点的情况下让车开始一个个加油站遍历行驶:
    • 当油供应不足时则返回-1
    • 当油量充足且能到达原出发点的时候,便返回出发点的位置。

在此完成之后,去看了题解里的双指针法,的确更高效,理解完因为时间原因暂且先不做双指针法的练习了。

结果

O(n²)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值