[Course] Advanced Computer Programming, Homework, week 8-2, LeetCode 134. Gas Station

134. Gas Station

题目来源

https://leetcode.com/problems/gas-station/description/

题意分析

给定一个圈,可以从圈的任何一个位置开始,

在位置i可以获得gas[i]的能量,从i到位置i+1需要消耗cost[i]的能量,

若能够按顺时针走一圈,输出初始位置,否则输出-1

(若有解,保证解是唯一的)

题目思路

从位置0开始,若能绕一圈,则0就是最终答案

若在某个位置i时,能量值为负,那么说明这一段消耗的能量为负,

又一开始的能量为正,则必然这一段中的任何一个位置不能作为起点

因此,尝试将位置i+1作为新的起点,并记录之前亏欠的油量,

若能走到最后,并且之后积累的油量大于之前亏欠的油量,则i+1即为答案,否则输出-1

若在另一个位置j能量值达到负,则重复上述过程

代码

class Solution:
    def canCompleteCircuit(self, gas, cost):
        """
        :type gas: List[int]
        :type cost: List[int]
        :rtype: int
        """
        n = len(gas)
        sum,s,own = 0
        for i in range(n):
            sum += gas[i]-cost[i]
            if sum < 0:
                s = i+1
                own += sum
                sum = 0

        if sum+own>=0:
            return s
        return -1

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值