【笔记】力扣 134. 加油站——贪心

news/2025/3/24 12:08:46/文章来源:https://www.cnblogs.com/xiins/p/18787565

134. 加油站

中等

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

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

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

示例 1:

输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
输出: 3
解释:
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
因此,3 可为起始索引。

示例 2:

输入: gas = [2,3,4], cost = [3,4,3]
输出: -1
解释:
你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油
开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
因此,无论怎样,你都不可能绕环路行驶一周。

题解

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n=gas.size();int curSum=0;;int totalSum=0;int start=0;for (int i=0;i<n;i++) {curSum+=gas[i]-cost[i];totalSum+=gas[i]-cost[i];if (curSum<0) {curSum=0;start=i+1;}}if (totalSum<0) return -1;return start;}
};


解题关键:从start开始,如果当前累加和<0,直接从i+1(start=i+1)重新累加,因为不论从start到i之间哪里开始,一定都是<0
证明:假设从j(start<j<i)开始累加(图中后面那一段)>0,则前面一段一定<0,而如果<0应该提前终止累加并重新开始,与事实相反,因此从start到i之间哪里开始累加任何一段都<0

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

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

相关文章

2025.3.23 鲜花

[省选联考 2025] 追忆 题解[省选联考 2025] 追忆 题解hello (bpm) 2025恭喜获得 最速被击破奖🏆不会 bitset,赛时想不到分块也是没救了。 首先必然要坚定 bitset 信念,因为其严格难于导出子图。 维护后继直接 bitset 就是 \(\frac{nm}w\) 的。 考虑到第二个限制 \(l, r\) 如…

给wordpress文章提供在线翻译和朗读的功能

之前有一个用wordpress搭的英文站点,我想给文章每个段落下面加两个“朗读”和“翻译”的按钮,方便英语不好的浏览者快速的了解中文意思和读法。 下面给出实现思路,全部是deepseek给出的代码实现的。 1、在(functions.php)文件末尾加上如下代码function enqueue_custom_scrip…

第五章 影响估算的因素

对软件项目产生影响的因素,可以有多种分类方式。了解这些影响因素有助于提高估算的准确度,并改善对软件项目动态特性的整体理解。 影响到项目工作量、成本和进度的最具决定性的因素毫无疑问是项目的规模。其次是正在开发的软件的类型,紧随其后的是人员因素。开发中使用的编程…

2025.3.25(周二)

4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。 假设一个中国的航空公司规定:① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。③ 中国国内的航班的商务仓有食物供应,但是…

2025.3.19(周三)

2、找零钱最佳组合假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种。请结合等价类划分法…

如何使用microSD卡模块与Arduino

MicroSD卡模块 ESP32有不同的microSD卡模块兼容。我们使用microSD卡模块,它使用SPI通信协议进行通信。您可以使用带有SPI接口的任何其他microSD卡模块。这个microSD卡模块也与Arduino板等其他微控制器兼容。学习如何使用microSD卡模块与Arduino。您可以使用默认SPI引脚将其连接…

VMware ESXi 8.0U3d macOS Unlocker OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版)

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版)VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版) VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe …

2025.3.10(周一)

实验二:UI设计 实验目的 本次实验的目的是让大家熟悉Android开发中的UI设计,包括了解和熟悉常用控件的使用、界面布局和事件处理等内容。 实验要求熟悉和掌握界面控件设计 了解Android界面布局 掌握控件的事件处理实验内容 一、 常用控件 1、 常用控件介绍 (1)基本控…

设计一个简单的圆柱形情绪灯

步骤1:打印零件和闪光WLED 3D打印外壳 下载提供的STL或STEP文件,并将它们加载到您首选的切片软件中。调整设置(填充,层高度,支撑),如果需要,打印每个部分。我使用白色PLA,填充15%,层高0.2mm。对于扩散器,它只是一个固体圆柱体,在花瓶模式下打印它。 一旦打印完成,把…

构建一个Pedro Robot

Pedro 2.0是一个完全开源的项目,旨在为每个人提供可访问和可定制的服务。Pedro Robot是一个完全开源的项目,设计为每个人都可以访问和定制。组装起来很容易,不需要螺丝,不需要胶水,不需要工具!完美的制造商,学生和教育工作者希望探索机器人和编程。 所有文档都可以在Pedr…

一文搞懂MCP协议与Function Call的区别

一、前言 大家好,我是六哥! 今天咱们聊聊编程里两个听起来有点复杂的概念——MCP协议和函数调用(function call),其实用大白话来讲,它们就是两种不同的“沟通方式”,就像咱们人与人之间交流也有不同的方式一样。下面我就用生活中的例子和Python代码,给大家好好讲讲它们…