news 2026/8/7 9:42:40

刷题笔记:力扣第134题-加油站

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
刷题笔记:力扣第134题-加油站

1.拿到题目,想到本题应该是在“gas[i] – cost[i]”(即净赚汽油)上做文章,所以尝试使用滑动窗口方法,不断向右移动右边界cur。当窗口内的净赚汽油总和大于0时说明能到达该处,如果小于0则不断收缩左边界start,直到总和大于0。同时维护已经途径的加油站个数step,当step == gasSize时说明找到了答案;如果cur已经到达数组末尾但还没有满足条件的step则说明无解。

2.基于以上思想,写出的完整代码如下:

1. int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) { 2. // start:候选起点下标 3. int start = 0; 4. // cur:当前遍历到的站点指针 5. int cur = 0; 6. // sum:当前区间内剩余油量总和 7. int sum = 0; 8. // step:当前区间包含的站点数量 9. int step = 0; 10. 11. // 候选起点不超过总站数时循环 12. while (start < gasSize){ 13. // 计算当前站点加油减耗油的净油量 14. int tmp = gas[cur % gasSize] - cost[cur % costSize]; 15. sum += tmp; 16. // 前进到下一站 17. cur++; 18. step++; 19. 20. // 当前区间油量不足,不断抛弃起点站点,直到sum>=0或区间无站点 21. while (sum < 0 && step > 0){ 22. sum -= gas[start % gasSize] - cost[start % costSize]; 23. start++; 24. step--; 25. } 26. 27. // 区间站点数量等于总站数,说明成功绕环一周,返回起点 28. if (step == gasSize) return start; 29. } 30. 31. // 所有起点均无法完成环路,返回-1 32. return -1; 33. }

该算法时间复杂度为O(n),空间复杂度为O(1)。

3.在使用滑动窗口的时候遇到了如下细节问题:

(1)一开始错误地认为净赚汽油为gas[cur % gasSize] - cost[(cur + gasSize - 1) % costSize],原因是看到官方题目示例中的一加一减就是错位的:

但没有考虑该示例一开始就单独加上了出发地的获取汽油数,并在最后单独减去了到达该处的所需汽油数,所以真正的周期还是gas[cur % gasSize] - cost[cur % costSize],即当前加油站能获取的汽油数减去到达当前加油站的所需汽油数。

(2)收缩左边界start应该放在while循环中而不是if中,因为本题滑动窗口的逻辑需要内部总和大于0时再扩张右边界cur,只if判断一次、收缩左边界start一次无法保证内部总和大于0。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 9:39:42

系规论文太难写?金老师团队帮你破局

在软考高级科目中&#xff0c;论文是让最多考生折戟沉沙的一关。系统规划与管理师考试要求一次性通过综合知识、案例分析、论文三科。很多考生综合知识和案例分析都能过&#xff0c;唯独论文屡考不过。2025年教材改版后&#xff0c;考试内容全面更新&#xff0c;论文的备考难度…

作者头像 李华
网站建设 2026/8/7 9:38:36

如何轻松掌控Windows窗口:WindowResizer强制调整工具完整指南

如何轻松掌控Windows窗口&#xff1a;WindowResizer强制调整工具完整指南 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的Windows应用程序窗口无法调整大小而烦恼…

作者头像 李华
网站建设 2026/8/7 9:33:18

MCP(模型上下文协议)

一、概述MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是 Anthropic 于 2024 年 11 月推出的开放标准&#xff0c;旨在为大型语言模型&#xff08;LLMs&#xff09;提供建立一套安全、标准化的通信协议&#xff0c;以便连接和调用外部数据源和…

作者头像 李华
网站建设 2026/8/7 9:32:41

电工三把锁:自锁、联锁、互锁

一、自锁原理&#xff1a;利用接触器自身的常开点味KM线圈通电进行自锁1、当按下SB2按钮&#xff0c;为KM的线圈接通电源2、KM通过闭合自身常开触点3、断开开关&#xff0c;接触器的KM线圈也会通过自身的常开触点保持通电二、互锁&#xff1a;利用自己的常闭点影响另外接触器的…

作者头像 李华
网站建设 2026/8/7 9:31:33

腾讯:合成书本级文档结构的教科书数据

&#x1f4d6;标题&#xff1a;Beyond Rephrasing: Book-Level Organization Improves Synthetic Textbook Data for Mid-Training &#x1f310;来源&#xff1a;arXiv, 2607.28109v1 &#x1f6ce;️文章简介 &#x1f538;研究问题&#xff1a;在合成教科书数据用于大模型中…

作者头像 李华
网站建设 2026/8/7 9:29:46

游戏战斗数值模拟实战:用CombatCalculator实现数据驱动的技能平衡

如果你是一名游戏开发者&#xff0c;尤其是负责战斗系统、数值平衡或技能设计的同学&#xff0c;最近是不是总被这几个问题困扰&#xff1a; 新设计的技能&#xff0c;伤害公式写出来了&#xff0c;但实际打出来是秒天秒地还是刮痧&#xff0c;心里完全没底&#xff0c;只能等…

作者头像 李华