每日一题--加油站

关键思路:我们很容易想到依次遍历每个加油站来看看其是否符合条件,但这需要O(n^2)的算法复杂度,这无法接受,所以需要进一步改进。

改进:每次从油量不够的油站重新作为初始点出发,算法复杂度O(n)。

这是一种典型的贪心思维:即从无法再坚持处重新坚持

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        if sum(cost) > sum(gas): return -1
        n = len(cost)
        cost = [gas[i] - cost[i] for i in range(len(cost))]
        j = 0
        while(j < n):
            curr = cost[j]
            if curr < 0:
                j+=1
                continue
            k = (j + 1) % n
            while(k!=j):
                if curr < 0:
                    break
                curr += cost[k]
                k = (k + 1) % n

            if k == j and curr >= 0:
                 return j
            
            j = max(j+1,k)
        return -1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值