首页 > 其他分享 >[LeetCode] 134. Gas Station

[LeetCode] 134. Gas Station

时间:2024-07-07 23:30:42浏览次数:21  
标签:cost int Gas gas element Station total startpoint LeetCode

想到了提前判断和小于0的情况,懒得写,果然被阴间用例10万个加油站坑了。

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        #1
        n = len(gas)
        if n ==1:
            if gas[0] >= cost[0]:
                return 0
            else:
                return -1
        #-1
        startpoint =[gas[x] - cost[x] for x in range(n)]
        if all(element < 0 for element in startpoint) or sum(startpoint) <0:
            return -1
        #else
        ret = -1
        for i, element in enumerate(startpoint):
            if element >= 0:
                total = 0
                temp =startpoint[i:]+ startpoint[:i]
                for i2, element2 in enumerate(temp):
                    total += element2
                    if total <0:
                        break
                    if i2 == n-1:
                        ret = i
                        return ret
        return ret

然后发现更阴间的99999个0的测试用例,Pycharm调试都崩溃了。。。
跳过了0的情况,题目说明可能的解是唯一的,所以0不影响结果。

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        #1
        n = len(gas)
        if n ==1:
            if gas[0] >= cost[0]:
                return 0
            else:
                return -1
        #-1
        startpoint =[gas[x] - cost[x] for x in range(n)]
        if all(element < 0 for element in startpoint) or sum(startpoint) <0:
            return -1
        #else
        ret = -1
        for i, element in enumerate(startpoint):
            if element > 0:
                total = 0
                temp =startpoint[i:]+ startpoint[:i]
                for i2, element2 in enumerate(temp):
                    if element2 ==0:
                        continue
                    total += element2
                    if total <0:
                        break
                    if i2 == n-1:
                        ret = i
                        return ret
        return ret

然后就遇到99995个1。。。换个思路解题。
不需要考虑已经走过的加油站,只需要维护一个总的燃油量,如果循环结束总量大于0,就说明已经走过的加油站可以在循环的后半程走完。

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        #else
        total_gas, curr_gas = 0, 0
        start_point = 0
        for i, element in enumerate(gas):
            curr_gas += element - cost[i]
            total_gas += element - cost[i]
            if curr_gas < 0:
                start_point = i + 1
                curr_gas = 0

        return start_point if total_gas >=0 else -1

近期做的最辛苦的一次,一开始思路被带偏了。

image
image

标签:cost,int,Gas,gas,element,Station,total,startpoint,LeetCode
From: https://www.cnblogs.com/alfredsun/p/18289118

相关文章

  • LeetCode 算法:岛屿数量 c++
    原题链接......
  • [LeetCode] 238. Product of Array Except Self
    坑真的很多,首先要处理全零reduce没有值typeerror的问题。classSolution:defproductExceptSelf(self,nums:List[int])->List[int]:total=reduce(mul,nums)ret=[]iftotal==0:try:total=reduce(mul,[......
  • 刷爆leetcode第九期
    题目一单值二叉树如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回true;否则返回false。题目图片如下我们这里主要是判断下根的值和它的左孩子还有右孩子相不相等如果相等返回true如果不相等返回false(当然这里还需要......
  • 刷爆leetcode第十期
    题目一相同的树给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。首先我们要来判断下它们的根是否相等根相等的话是否它们的左子树相等是否它们的右子树相等一直到子树为空为止大......
  • Leetcode刷题记录1 哈希+双指针+滑动窗口
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言hot1001.哈希#1.两数之和#49.字母异位词分组#128.最长连续序列2.双指针#283.移动零#11.盛最多水的容器#15.三数之和#42.接雨水3.滑动窗口#3.无重复字符的最长子串#438.找到字符串中所有......
  • [Leetcode]经典算法
    检测环快慢指针法是一种用于检测链表中是否存在环的有效方法,同时也可以找到环的起点。该方法的原理基于两个指针在链表上同时移动,其中一个移动得更快,而另一个移动得更慢。检测环的存在:使用两个指针,一个称为快指针(fast),一个称为慢指针(slow)。在每一步中,快指针向前移动两步,而慢......
  • leetcode678:有效的括号字符串
    给你一个只包含三种字符的字符串,支持的字符类型分别是 '('、')' 和 '*'。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。有效 字符串符合如下规则:任何左括号 '(' 必须有相应的右括号 ')'。任何右括号 ')' 必须有相应的左括号 '(' 。左括......
  • JCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故
    JJCR一区|Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断目录JJCR一区|Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNN-MATTGASF-CNNGADF-CNN基本介绍程序设计参考......
  • 【LeetCode 0024】【链表】交换单链表相邻两个节点
    SwapNodesinPairsGivena linkedlist,swapeverytwoadjacentnodesandreturnitshead.Youmustsolvetheproblemwithout modifyingthevaluesinthelist’snodes(i.e.,onlynodesthemselvesmaybechanged.)Example1:**Input:**head=[1,2,3......
  • 【LeetCode 0141】【链表】【双指针之快慢指针】判断给定单链表是否存在环
    LinkedListCycleGivenhead,theheadofalinkedlist,determineifthelinkedlisthasacycleinit.Thereisacycleinalinkedlistifthereissomenodeinthelistthatcanbereachedagainbycontinuouslyfollowingthe next pointer.Internal......