LeetCode 134. 加油站(O(n)时间+O(1)空间最优解)

✨ 本文针对 LeetCode 中等难度题目 134. 加油站,提供一种时间复杂度 O(n)、空间复杂度 O(1) 的最优解法,结合具体思路推导和代码实现,帮你快速吃透这道题。

一、题目描述

在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。

你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组gascost,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回-1。如果存在解,则保证它是唯一的。

二、解题思路推导

核心思想

利用「贪心策略」,通过一次遍历找到合法起点,无需重复模拟。核心逻辑是:如果从起点 i 到 j 时汽油耗尽,那么 i 到 j 之间的所有站点都不能作为起点,直接将起点更新为 j+1

变量定义

  • i:标记当前候选起点,初始设为最后一个站点(n-1),反向推导更高效。

  • j:标记当前行驶到的站点,从起点 i 开始向前移动(循环遍历)。

  • s:当前油箱剩余汽油量,初始为 0。

  • cnt:当前已行驶过的加油站数量,用于判断是否完成一周循环。

执行步骤

  1. 初始化:i = n-1j = n-1s = 0cnt = 0

  2. 开始行驶:移动j(循环左移,即 j = (j-1) % n,也可正向遍历,此处反向更贴合初始起点设置),并更新剩余汽油s += gas[j] - cost[j](表示从 j 站开到 j+1 站的汽油变化)。

  3. 判断剩余汽油:若s < 0,说明当前起点i无法支撑到j站,需将起点i循环左移(i = (i-1) % n),同时将s加上gas[i] - cost[i](补充从新起点 i 到原起点 i+1 的汽油量),直至s >= 0

  4. 计数判断:每行驶一个站点,cnt += 1。当cnt == n时,说明已完成一周循环,停止遍历。

  5. 结果判断:若此时s >= 0,则i是合法起点,返回i;否则返回 -1(无合法起点)。

逻辑验证

为什么这样能找到合法起点?假设从 i 到 j 时 s 为负,说明 i 到 j 之间的任何站点 k 都无法作为起点——因为从 k 出发到 j 时,汽油量只会比从 i 出发到 j 时更少(i 到 k 之间的汽油消耗已导致亏损)。因此直接跳过中间站点,将起点更新为 j+1,减少无效遍历。

三、代码实现(Java)

Java 实现

class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { int n = gas.length; int i = n - 1, j = n - 1; int cnt = 0, s = 0; while (cnt < n) { s += gas[j] - cost[j]; ++cnt; j = (j + 1) % n; while (s < 0 && cnt < n) { --i; s += gas[i] - cost[i]; ++cnt; } } return s < 0 ? -1 : i; } }

四、复杂度分析

  • 时间复杂度 O(n):每个站点最多被访问两次(一次被 j 遍历,一次被 i 遍历),整体遍历次数为 O(n),无嵌套重复遍历。

  • 空间复杂度 O(1):仅使用 4 个额外变量(i、j、s、cnt),不依赖额外数组或数据结构,空间开销恒定。

五、测试用例验证

示例 1 验证

输入:gas = [1,2,3,4,5], cost = [3,4,5,1,2]

执行过程:

初始 i=4, j=4, s=0, cnt=0。

j=4:s += 5-2=3 → s=3,cnt=1,j=3。s≥0,无需移动i。

j=3:s +=4-1=3 → s=6,cnt=2,j=2。

j=2:s +=3-5=-2 → s=4,cnt=3,j=1。

j=1:s +=2-4=-2 → s=2,cnt=4,j=0。

j=0:s +=1-3=-2 → s=0,cnt=5(等于n=5)。循环结束,s≥0,返回i=3(过程中i未移动,最终i=3)。

示例 2 验证

输入:gas = [2,3,4], cost = [3,4,3]

执行结束后 cnt=3,但 s= (4-3)+(3-4)+(2-3) = 1-1-1 = -1 <0,返回-1。

六、总结

本题的关键是利用贪心策略跳过无效起点,将时间复杂度从 O(n²) 优化到 O(n)。核心逻辑是「无效起点区间内的所有站点均无效」,通过反向推导(初始起点设为 n-1)简化遍历过程,同时保证空间复杂度最优。

这种思路不仅适用于本题,还可迁移到类似「寻找循环有效起点」的贪心问题中,建议结合代码多模拟几遍执行过程,加深对贪心逻辑的理解。

💡 如果你有其他解法或疑问,欢迎在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1211246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计案例】基于Springboot的幼儿园综合管理系统基于springboot的幼儿园管理系统基于SpringBoot+Vue的幼儿园管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

提示工程架构设计实战:旅游行业智能推荐提示系统架构设计全流程

提示工程架构设计实战&#xff1a;旅游行业智能推荐提示系统架构设计全流程 一、标题选项 《提示工程落地指南&#xff1a;旅游行业智能推荐系统架构设计全流程》《从0到1&#xff1a;旅游行业智能推荐提示系统架构实战解析》《旅游推荐智能化&#xff1a;基于提示工程的系统…

【计算机毕业设计案例】基于Java的养老院管理系统的设计与实现基于springboot的养老院管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

深度学习篇---初看transformer

核心比喻&#xff1a;一个超级强大的“翻译官” 想象一下&#xff0c;你要把一段中文翻译成英文。一个传统的“翻译官”&#xff08;老式模型&#xff09;会这样做&#xff1a; 从左到右&#xff0c;一个字一个字地看&#xff0c;看完前面再猜后面。 像个记性不太好的人&…

固高控制板卡驱动安装教程

固高控制板卡驱动安装教程

基于大数据的图书推荐系统的设计与实现-计算机毕业设计源码+LW文档

基于大数据的图书推荐系统的设计与实现 摘要&#xff1a;本文详细阐述了基于大数据的图书推荐系统的研究背景意义、需求分析以及功能设计。该系统旨在解决信息过载下读者选书难和图书销售效率低的问题&#xff0c;通过大数据技术实现精准推荐。需求分析涵盖用户、商家等多方面需…

学术研究的第一步不再困难,AI工具助你轻松优化开题报告模板内容

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…

想要高效完成学术写作?这份AI辅助的开题报告模板是你的最佳选择

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…

Java毕设选题推荐:基于springboot的幼儿园管理系统基于springboot的实验幼儿园信息管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

区间并查集|树状数组

lc3245 lc3244 区间并查集 _并边 i set.find(i 1)) set.merge(i, q[1]-1); 这步实现跳跃 class UFS { public: vector<int> fa; int size; UFS(int n) { fa.resize(n); iota(fa.begin(), fa.end(), 0); size n; }…

计算机Java毕设实战-基于springboot的幼儿园管理系统基于Springboot的幼儿园综合管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【课程设计/毕业设计】基于springboot+vue的实验幼儿园信息管理系统基于springboot的幼儿园管理系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java计算机毕设之基于SpringBoot+Vue的幼儿园管理系统基于springboot的幼儿园管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Expo+React Native实现鉴权

一、引入相关依赖 npm i @reduxjs/toolkit react-redux expo-secure-store axios依赖 作用@reduxjs/toolkit 简化 Redux 开发的官方工具包,提供标准化的 Redux 最佳实践react-redux 连接 React 组件和 Redux Store 的…

Java毕设项目推荐-基于springboot的养老院管理系统的设计与实现基于SpringBoot+Vue的养老院管理系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设项目推荐-基于Springboot的幼儿园综合管理系统基于springboot的幼儿园管理系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

随笔-无具体内容

本文聚焦数字化新业态下的数据安全创新技术Token化&#xff0c;核心是用非敏感Token替代个人敏感数据&#xff08;PII&#xff09;流通&#xff0c;实现“可用、不可见”&#xff0c;解决数据安全与效率合规的矛盾。 文中先分析数字化时代数据的流动性、可复制性等特征带来的安…

吐血推荐!继续教育10款AI论文平台测评与推荐

吐血推荐&#xff01;继续教育10款AI论文平台测评与推荐 2026年继续教育AI论文平台测评&#xff1a;如何选择高效写作工具&#xff1f; 随着人工智能技术的不断发展&#xff0c;AI论文写作工具逐渐成为继续教育领域的重要辅助工具。然而&#xff0c;面对市场上琳琅满目的平台…

2026.1.24 作业 - # P14317 「ALFR Round 11」A 浴眼盯真 (dingzhen)

2026.1.24 作业 - # P14317 「ALFR Round 11」A 浴眼盯真 (dingzhen)题目描述 小 W 想要让你判断一个只含有小写字母的长度为 \(n\) 的字符串 \(s\) 是否是浴眼盯真的,并满足以下条件:这个字符串含有 \(26\) 个不同的…

深度测评专科生必用8款一键生成论文工具:开题报告文献综述全攻略

深度测评专科生必用8款一键生成论文工具&#xff1a;开题报告文献综述全攻略 为什么需要这份专科生专属论文工具测评&#xff1f; 随着学术写作需求的不断增长&#xff0c;越来越多的专科生开始依赖AI写作工具来提升论文撰写效率。然而&#xff0c;面对市场上琳琅满目的工具&am…