Day 34 贪心算法 part03 : 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
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 可为起始索引。示例 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 升汽油。 因此,无论怎样,你都不可能绕环路行驶一周。提示:
gas.length == ncost.length == n1 <= n <= 1050 <= gas[i], cost[i] <= 104
这个问题可以通过一次遍历来解决,时间复杂度为 �(�)O(n)。
具体算法如下:
- 初始化
start_index(起始站点)为 0 和total_gas(总油量)和current_gas(当前油量)为 0。 - 遍历所有的加油站:
- 在每一个加油站,增加
current_gas和total_gas,每次加gas[i]。 - 每次前往下一个加油站,减去
cost[i],并且更新current_gas。 - 如果
current_gas变成负数,那就意味着从当前的start_index无法到达下一个加油站。因此,更新start_index为i + 1,并且将current_gas重置为 0。
- 在每一个加油站,增加
- 如果
total_gas是负数,返回 -1,否则返回start_index。
代码如下:
class Solution(object):def canCompleteCircuit(self, gas, cost):""":type gas: List[int]:type cost: List[int]:rtype: int"""total_gas = 0current_gas = 0start_index = 0for i in range(len(gas)): #i表示从第几站出发total_gas += gas[i] - cost[i]current_gas += gas[i] - cost[i]# 如果当前油量不够,重新设置起点,并将当前油量重置为0if current_gas < 0:start_index = i + 1current_gas = 0# 检查总油量是否足够绕一圈return start_index if total_gas >= 0 else -1
相关文章:
Day 34 贪心算法 part03 : 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas…...
气象站的构成及功能应用
气象站是一种用于观测、记录和报告天气数据的设备。它是由数据采集系统、通讯系统、供电系统和立杆支架构成。 一、气象站的构成: 数据采集系统:用于测量气温、湿度、风速、风向、气压、降雨量、雪深等气象参数。 通讯系统:收集和处理传感…...
Qt中布局管理使用总结
目录 1. 五大布局 1.1 QVBoxLayout垂直布局 1.2 QHBoxLayout水平布局 1.3 QGridLayout网格布局 1.4 QFormLayout表单布局 1.5 QStackedLayout分组布局 1.6 五大布局综合应用 2. 分割窗口 3. 滚动区域 4. 停靠区域 1. 五大布局 1.1 QVBoxLayout垂直布局 #include <…...
(位运算) 剑指 Offer 15. 二进制中1的个数 ——【Leetcode每日一题】
❓ 剑指 Offer 15. 二进制中1的个数 难度:简单 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 提示ÿ…...
基于SSM的新能源汽车在线租赁系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
CTF 代码审计之绕过过滤的空白字符
题目 <?php header("Content-Type:text/html;charsetutf-8"); highlight_file(02kbzf.php);//引入名为 flag2.php 的文件。 include(f . lag2 . .php);//初始化变量 $info 和 $req。 $info ""; $req [];//读取文件 flag2.php 的内容到变…...
【Vue】 Vue3 安装说明,适合小白新手
1、独立版本 我们可以在 Vue.js 的官网上直接下载最新版本, 并用 下载 Vue.js https://unpkg.com/vuenext 2、使用 CDN 方法 以下推荐国外比较稳定的两个 CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。 Staticfile CDN(国内&am…...
电脑提示“系统找不到指定的文件”怎么办?
“系统找不到指定的文件”对于Windows用户来说是一个很常见的错误,尤其是Win10用户,经常会遇到Win10提示找不到指定文件。在此错误后面有时还会出现错误代码:0x80070002,但是,故障类型或代码在不同的操作系统规范上是不…...
向openssl中添加一个最简单的算法
文章目录 一、尝试在sha.c中添加新的函数二、添加自定义算法2.1 添加对应文件2.2 相关配置2.3 编译运行 一、尝试在sha.c中添加新的函数 在尝试添加新算法前,我先尝试在原有的旧算法中添加一个新函数,看是否能被编译并生成对应的动态链接库。 关于open…...
自己公司开发的ERP系统,怎么对接京东,淘宝等这些电商平台?
得益于互联网基建的成熟及快速发展的电子商贸经济,我国线上零售市场快速增长,2022年全国线上零售额达到13.79万亿元,占社会消费品零售总额的比重为27.2%,也就是说每卖出三件零售商品,就有一件是从线上销售。中大型零售…...
联想集团财报不及华尔街预期,财务业绩恐将继续恶化
来源:猛兽财经 作者:猛兽财经 华尔街对联想集团财报的预测 在联想集团(00992)公布2024财年第一季度财务业绩之前,华尔街分析师就曾预测,联想集团的收入和利润将实现强劲增长。 具体而言,根据S&…...
计网基础面试题
浏览器输入网址之后发生什么 1,DNS解析过程 2,三次握手 3,TLS通信 4,发送数据 5,四次挥手 TCP三次握手和四次挥手 两台计算机通信的过程 局域网通信———交换机——MAC地址 广域网通信———路由器——IP地址 网…...
设置Linux CentOS7桥接模式连网
在虚拟机上安装centos7系统后,首要任务就是设置网络。 我们在文章《设置linux centos7连接网络》中讨论了如何设置NAT模式连网。本文讨论如何在设置好NAT模式后,调换为桥接模式。 仍采用图形化方式设置方法。 一、查看物理机网络 把虚拟机设置为桥接…...
Mysql底层数据结构为什么选择B+树
索引底层采用什么数据结构,为什么使用B树而不是其他数据结构: (1)如果采用二叉树:使用递增字段作为索引时,二叉树会退化成链表,查找效率太低 (2)如果采用红黑树…...
R语言列操作函数
目录 一.dplyr包 1.新增变量和变量重新赋值 2.筛选行 3.筛选列 4.分组计算 5.管道操作符 6.连接数据框 二.tidyr 1.列的分裂 2.列的合并 3.宽数据转长数据 4.长数据转宽数据 一.dplyr包 1.新增变量和变量重新赋值 > head(ToothGrowth)len supp dose 1 4.2 …...
【Unity】VS Code 没有自动补全 MonoBehaviour 的方法
正常来说,在VS Code 输入类似 OnTriggerEnter2D等方法名时,VS Code会根据已经输入的前缀自动提示相关方法。 在不正常的情况下,根据StackOverFlow上面的回答,依次试过了 安装 .NET SDK安装 .NET Framework Dev PackVS Code安装 …...
计算机竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv
文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…...
大厂面试 | 百度一面,顶不住
题目来源:https://www.nowcoder.com/feed/main/detail/d39aabc0debd4dba810b4b9671d54348 前文 本期是【捞捞面经】系列文章的第 2 期,持续更新中…。(更多与往期下方仓库直达) 《捞捞面经》系列正式开始连载啦,据说看…...
c++线程
pthread(部分内容来自菜鸟教程) 创建线程 创建一个 POSIX 线程: #include <pthread.h> pthread_create (thread, attr, start_routine, arg) pthread_create 创建一个新的线程,并让它可执行。 参数: thread :指向线程标…...
【Docker】02-安装mysql
参考教程: https://www.bilibili.com/video/BV1Qa4y1t7YH/?p5&spm_id_frompageDriver&vd_source4964ba5015a16eb57d0ac13401b0fe77 docker安装Mysql 1、拉取最新版本的镜像 docker pull mysq:latestl 2、运行mysql服务 docker run --name mysql -e MYSQL_…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
