元宝 LeetCode 134. 加油站 Python3实现

发布时间:2026/10/1 22:09:39
元宝    LeetCode 134. 加油站 Python3实现 题目简述环形路上有“n” 个加油站“gas[i]”第“i” 站可加的油量“cost[i]”从第“i” 站开到第“i1” 站的耗油量最后一站开回第 0 站若能从某站出发顺时针绕行一圈返回该站下标若不能返回“-1”题目保证答案唯一。核心思路贪心算法全局判断如果所有站“gas” 总和 “cost” 总和绝对跑不完直接“-1”。局部贪心从左到右模拟行驶维护当前油箱余量“cur”。一旦“cur 0”说明从当前记录的“start” 出发到不了本站“i”。那么“start” 到“i” 之间的任何一站都不可能作为起点因为油量只会更少直接把起点设为“i1”“cur” 清零重新算。遍历结束后若总油量够则记录的“start” 就是唯一解。 关键性质如果从 A 出发到不了 B那么 A~B 之间任意点出发都到不了 B。Python3 实现LeetCode 可直接提交from typing import Listclass Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) - int:total 0 # 全局油差累计cur 0 # 从当前候选起点出发的累计油差start 0 # 候选起点for i in range(len(gas)): diff gas[i] - cost[i] total diff cur diff # 当前累计为负说明从 start 出发到不了 i if cur 0: start i 1 # 起点更新为下一站 cur 0 # 重新累计 # 总油量足够才能跑完否则返回 -1 return start if total 0 else -1复杂度分析维度 复杂度时间 O(n) 只遍历一次空间 O(1) 仅用几个变量为什么贪心是对的一句话理解环形路径上若总油量非负则必然存在唯一一个“最低累计油差点”的下一个位置作为起点。我们上面“cur0” 时不断后移“start”本质上就是在找这个“最低点之后”的位置。对比暴力解法暴力每个站都模拟跑一圈 → O(n²)贪心利用“连续段不可达”性质剪枝 → O(n)面试标准答法 ✅需要我顺便给出带调试打印的版本或者用双指针思路的另一种写法吗

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询