当前位置: 首页 > news >正文

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 == n
  • cost.length == n
  • 1 <= n <= 105
  • 0 <= gas[i], cost[i] <= 104

这个问题可以通过一次遍历来解决,时间复杂度为 �(�)O(n)。

具体算法如下:

  1. 初始化 start_index(起始站点)为 0 和 total_gas(总油量)和 current_gas(当前油量)为 0。
  2. 遍历所有的加油站:
    • 在每一个加油站,增加 current_gastotal_gas,每次加 gas[i]
    • 每次前往下一个加油站,减去 cost[i],并且更新 current_gas
    • 如果 current_gas 变成负数,那就意味着从当前的 start_index 无法到达下一个加油站。因此,更新 start_indexi + 1,并且将 current_gas 重置为 0。
  3. 如果 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

 

http://www.lryc.cn/news/155136.html

相关文章:

  • 气象站的构成及功能应用
  • Qt中布局管理使用总结
  • (位运算) 剑指 Offer 15. 二进制中1的个数 ——【Leetcode每日一题】
  • 基于SSM的新能源汽车在线租赁系统
  • CTF 代码审计之绕过过滤的空白字符
  • 【Vue】 Vue3 安装说明,适合小白新手
  • 电脑提示“系统找不到指定的文件”怎么办?
  • 向openssl中添加一个最简单的算法
  • 自己公司开发的ERP系统,怎么对接京东,淘宝等这些电商平台?
  • 联想集团财报不及华尔街预期,财务业绩恐将继续恶化
  • 计网基础面试题
  • 设置Linux CentOS7桥接模式连网
  • Mysql底层数据结构为什么选择B+树
  • R语言列操作函数
  • 【Unity】VS Code 没有自动补全 MonoBehaviour 的方法
  • 计算机竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv
  • 大厂面试 | 百度一面,顶不住
  • c++线程
  • 【Docker】02-安装mysql
  • JAVA每日小知识(关于excel下载时插入和stream流遍历优化)
  • 阿里后端开发:抽象建模经典案例
  • 【车载以太网测试从入门到精通】——DoIP BootLoader刷写测试(含CAPL源码)
  • RK开发板的USB连接(Ubuntu)
  • Redis-Cluster集群的部署(详细步骤)
  • Vulnhub: Hogwarts: Bellatrix靶机
  • 机器学习(吴恩达第一课)
  • 固定资产管理怎么改革
  • 【js】防抖和节流的使用场景和区别:
  • Blazor前后端框架Known-V1.2.14
  • 港陆证券:五日线破位怎么看?