【贪心算法】Leetcode 134. 加油站【中等】

加油站

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

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

给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -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 可为起始索引。

解题思路

这是一个典型的贪心算法问题。

  • 1、从某个加油站出发,尝试遍历每个加油站,计算到达下一个加油站时油箱的剩余油量是否足够。
  • 2、如果足够,继续前进;
  • 3、如果不够,就从下一个加油站重新开始尝试。

Java实现

public class GasStation {public int canCompleteCircuit(int[] gas, int[] cost) {int totalGas = 0;int totalCost = 0;int currentGas = 0;int start = 0;for (int i = 0; i < gas.length; i++) {totalGas += gas[i];totalCost += cost[i];currentGas += gas[i] - cost[i];if (currentGas < 0) {//这里要理解//假如当前一段路无法走下去了,这就该放弃这段路, 换个新的起点了。// 因为这个起点最多只能到这里了,从这段路的任何地方重新开始都到达不了更远的地方了。// 因为到达下一个站前一定是要有余量汽油(>=0)的,有余量帮助+当前站都到达不了下一站,所以直接从当前站开始也不可能到达下一站// 只能从下一站开始,尝试积累更多的余量汽油去抵达start = i + 1;// 从下一个加油站开始currentGas = 0;// 重新计算剩余油量}}return totalGas >= totalCost ? start : -1;}public static void main(String[] args) {GasStation gasStation = new GasStation();int[] gas1 = {1, 2, 3, 4, 5};int[] cost1 = {3, 4, 5, 1, 2};System.out.println("Test Case 1:");System.out.println("Gas: [1, 2, 3, 4, 5]");System.out.println("Cost: [3, 4, 5, 1, 2]");System.out.println("Starting Station: " + gasStation.canCompleteCircuit(gas1, cost1)); // Expected: 3int[] gas2 = {2, 3, 4};int[] cost2 = {3, 4, 3};System.out.println("\nTest Case 2:");System.out.println("Gas: [2, 3, 4]");System.out.println("Cost: [3, 4, 3]");System.out.println("Starting Station: " + gasStation.canCompleteCircuit(gas2, cost2)); // Expected: -1}
}

时间空间复杂度

  • 时间复杂度: 只需遍历一次数组,时间复杂度为 O(n),其中 n 是加油站的数量。
  • 空间复杂度: 使用了常数级的额外空间,空间复杂度为 O(1)。

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

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

相关文章

【Android】自定义View不显示的一种问题

需求 在自定义View里面添加一种颜色表示某个数据到达了某个状态 问题 颜色没有显示 问题分析 在代码中定义一种颜色和画笔 private int wathetBlue;private Paint backgroundWathetBlue;在init方法里面初始化 wathetBlue Color.argb(205, 165, 209, 254);backgroundWat…

5月游戏市场迎来新的体验,网易两款游戏重磅出炉

易采游戏网5月9日消息&#xff0c;随着科技的飞速发展&#xff0c;手机游戏已经成为人们休闲娱乐的重要方式。在这个领域&#xff0c;网易作为国内领先的游戏开发商&#xff0c;一直致力于为玩家带来高品质的游戏体验。近日&#xff0c;网易携手国际大厂Square Enix&#xff0c…

2024年数维杯高校数学建模竞赛(B题) 建模解析| 生物质和煤共热解问题的研究 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决数维杯的难关呀。 完整内容可…

Flink物理分区概念与分类详解

Apache Flink是一个分布式流处理框架&#xff0c;它允许在大规模数据流上进行实时计算。在Flink中&#xff0c;数据如何在不同的任务&#xff08;Task&#xff09;之间传输是一个关键因素&#xff0c;直接影响到系统的性能和可扩展性。物理分区&#xff08;Physical Partitioni…

在线教育系统平台软件,在线教育市场需求怎么样呢?

在线教育发展至今&#xff0c;通过互联网技术&#xff0c;有效地缓解了我国师资不足、优质教育资源供给不均等问题。根据速途研究院公开数据显示&#xff0c;中国在线教育用户规模呈稳定增长趋势&#xff0c;增长率也在逐年提高。我国在线教育市场需求如何? 一、市场预期&…

QML基础语法七

模型视图代理 1. 模型&#xff1a;数据及其结构&#xff0c;多种QML创建模型 2. 视图&#xff1a;显示数据容器&#xff0c;数据可以通过列表或表格的形式显示 3. 委托&#xff1a;控制数据如何在视图中显示&#xff0c;委托获取、封装了模型中每个数据&#xff0c;需要通过委…

创建Spring Boot项目及配置

目录 一、创建项目所需要的插件 1、安装插件 二、创建项目 三、创建项目所面临的常见问题。 1、IDEA不能识别 2、无效的发行版本 3、确认jar包是否下载成功 一、创建项目所需要的插件 1、安装插件 首先需要在IDEA插件里面搜索Spring&#xff0c;选择Spring Boot Helper…

如何去掉溢出内容的overflow属性滚动条

在CSS中&#xff0c;如果你设置了overflow属性为auto或scroll&#xff0c;并且内容确实超出了容器的大小&#xff0c;那么浏览器会自动显示滚动条。但是&#xff0c;如果你想在某些情况下隐藏这些滚动条&#xff0c;有几种方法可以尝试&#xff0c;但请注意&#xff0c;这些方法…

政安晨:【Keras机器学习示例演绎】(四十一)—— 使用预先训练的词嵌入

目录 设置 简介 下载新闻组 20 数据 让我们来看看这些数据 清洗数据并将数据分成训练集和验证集 创建词汇索引 加载预训练的词嵌入 建立模型 训练模型 导出端到端模型 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与…

Python批量修改图片文件名中的指定名称

批量处理图像时&#xff0c;图片名有时需要统一&#xff0c;本教程仅针对图片中名如&#xff1a;0001x4.png&#xff0c;批量将图片名中的x4去除&#xff0c;只留下0001.png的情况。 如果想要按照原图片顺序批量修改图片名&#xff0c;参考其它博文&#xff1a;按照原顺序批量…

Vue中常用指令

Vue中的常用指令 Vue中的常用指令内容渲染指令条件渲染指令事件绑定指令内联语句事件处理函数给事件处理函数传参 属性绑定指令列表渲染指令v-for中的key 双向绑定指令 Vue中的常用指令 概念&#xff1a;指令 是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。Vue 会根据不同的【…

飞天使-k8s知识点30-kubernetes安装1.28.0版本-使用containerd方式

文章目录 安装前准备containerd 配置内核参数优化安装nerdctl以上是所有机器全部安装开始安装初始化&#xff0c;这步骤容易出问题&#xff01;安装flannel 结果展示 安装前准备 内核升级包的md5,本人已验证&#xff0c;只要是这个md5值&#xff0c;放心升级 1ea91ea41eedb35c…

MySQL ——变量的定义和使用

DDL和DML CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) …

硬性清空缓存的方法

前端发布代码后&#xff0c;我们是需要刷新页面再验证的。有时候仅仅f5 或者ctrlshiftdelete快捷键仍然有历史缓存&#xff0c;这时可以通过下面的方法硬性清空缓存。 以谷歌浏览器为例&#xff0c;打开f12&#xff0c;右键点击刷新按钮&#xff0c;选择【清空缓存并硬性加载】…

JavaScript异步编程——07-Promise实例的方法【万字长文,感谢支持】

Promise 实例的方法简介 Promise 的 API 分为两种&#xff1a; Promise 实例的方法&#xff08;也称为&#xff1a;Promis的实例方法&#xff09; Promise 类的方法&#xff08;也称为&#xff1a;Promise的静态方法&#xff09; Promise 实例的方法&#xff1a;我们需要实…

PyTorch机器学习实现液态神经网络

大家好&#xff0c;人工智能的发展催生了神经网络这一强大的预测工具&#xff0c;这些网络通过数据和参数优化生成预测&#xff0c;每个神经元像逻辑回归门一样工作。结合反向传播技术&#xff0c;模型能够根据损失函数来调整参数权重&#xff0c;实现自我优化。 然而&#xf…

等保测评技术方案

等保&#xff0c;即“网络安全等级保护”&#xff0c;是中国实施的一项信息安全保护制度&#xff0c;旨在对不同重要性的信息和信息系统实行分等级保护&#xff0c;保障国家安全、社会秩序以及公共利益。等保技术方案是指为了达到国家网络安全等级保护标准要求&#xff0c;针对…

Mock.js 问题记录

文章目录 Mock.js 问题记录1. 浮点数范围限制对小数不起效2. increment 全局共用 Mock.js 问题记录 最新写网页的时候引入了 Mock.js 来生成模拟数据&#xff1b; Mock使用起来很方便&#xff0c;具体可以参考 官网 很快就能上手&#xff0c; 但是这个项目最近一次提交还是在2…

SCPI控制

SCPI 定义:Standard Commands for Programmable Instruments,可编程仪器的标准命令,是一个独立于硬件的纯粹的软件标准,字符串可通过任何仪器接口进行传送。 SCP命令实际是通过ASCII字符串形式在命令与仪器进行交互。命令一般由一系列的关键字构成,有的还需要包括参数,…

oracle 修改dmp文件导入导出文件位置(DATA_PUMP_DIR)

查询dmp导入、导出文件所在位置&#xff1a; SELECT * FROM DBA_DIRECTORIES T WHERE T.DIRECTORY_NAME DATA_PUMP_DIR; 2.修改DATA_PUMP_DIR配置的文件位置(直接在数据库执行脚本即可): create or replace directory DATA_PUMP_DIR as /opt/tools/oracle/dmpFile/;或者通过…