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

LeetCode 134 Gas Station 解题思路和python代码

题目
There are n gas stations along a circular route, where the amount of gas at the ith station is gas[i].

You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from the ith station to its next (i + 1)th station. You begin the journey with an empty tank at one of the gas stations.

Given two integer arrays gas and cost, return the starting gas station’s index if you can travel around the circuit once in the clockwise direction, otherwise return -1. If there exists a solution, it is guaranteed to be unique.

Example 1:

Input: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
Output: 3
Explanation:
Start at station 3 (index 3) and fill up with 4 unit of gas. Your tank = 0 + 4 = 4
Travel to station 4. Your tank = 4 - 1 + 5 = 8
Travel to station 0. Your tank = 8 - 2 + 1 = 7
Travel to station 1. Your tank = 7 - 3 + 2 = 6
Travel to station 2. Your tank = 6 - 4 + 3 = 5
Travel to station 3. The cost is 5. Your gas is just enough to travel back to station 3.
Therefore, return 3 as the starting index.
Example 2:

Input: gas = [2,3,4], cost = [3,4,3]
Output: -1
Explanation:
You can’t start at station 0 or 1, as there is not enough gas to travel to the next station.
Let’s start at station 2 and fill up with 4 unit of gas. Your tank = 0 + 4 = 4
Travel to station 0. Your tank = 4 - 3 + 2 = 3
Travel to station 1. Your tank = 3 - 3 + 3 = 3
You cannot travel back to station 2, as it requires 4 unit of gas but you only have 3.
Therefore, you can’t travel around the circuit once no matter where you start.

Constraints:

n == gas.length == cost.length
1 <= n <= 105
0 <= gas[i], cost[i] <= 104

解题思路
这道题目中,我们已知每个油站可以获得的油量,以及前往下一个油站的油耗,我们需要判断是否有一个油站可以作为起始点,让车子有足够的油耗遍历每个油站,跑完一整圈。

如果所有油站的油量总和要小于油耗的总和,车子一定跑不完一圈,返回 -1。
答案是唯一的,所以有且只有一个油站可以让车子跑完一圈。

首先,检查是否所有油站的油量总和要大于油耗的总和。
使用贪婪算法找到这个能跑完一圈的起始油站。通过记录现有的油量 current gas,如果一个油站的现有油量小于0,那么我们一定不可能继续跑完一整圈。所以我们把下一个油站假设为起始点,重设 current gas为0,再作检查。

class Solution(object):def canCompleteCircuit(self, gas, cost):""":type gas: List[int]:type cost: List[int]:rtype: int"""total_gas = 0current_gas = 0start_position = 0for i in range(len(gas)):total_gas += gas[i] - cost[i]current_gas += gas[i] - cost[i]if current_gas < 0:start_position = i + 1 # 设置下一个油站为我们想要找的起始点current_gas = 0if total_gas < 0:return -1else:return start_position

time complexity为O(n)

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

相关文章:

  • 服务攻防
  • leetcode 力扣算法题 快慢指针 双指针 19.删除链表的倒数第n个结点
  • 网络五层模型:物理层、数据链路层、网络层、传输层、应用层,分别解决了什么问题?
  • OpenCV视频I/O(18)视频写入类VideoWriter之初始化 VideoWriter 对象的函数open()的使用
  • 大数据处理从零开始————4.认识HDFS分布式文件系统
  • jwt认证课件讲解
  • 【判断推理】逻辑基础
  • AcWing 655:天数转换 ← 整除、求余
  • 【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
  • 算法笔记(十三)——BFS 解决最短路问题
  • Android 简单实现联系人列表+字母索引联动效果
  • 自动驾驶-问题笔记-待解决
  • 在掌控板中加载人教版信息科技教学指南中的educore库
  • 关于CSS Grid布局
  • 初始爬虫12(反爬与反反爬)
  • 成像基础 -- 最大对焦清晰的物距计算
  • win10服务器启动且未登录时自动启动程序
  • 算法专题四: 前缀和
  • 【Linux】基础IO(文件描述符、缓冲区、重定向)
  • 一篇文章快速学会docker容器技术
  • 【MySQL】使用 JDBC 连接数据库
  • 数据结构与算法笔记:概念与leetcode练习题
  • 十大时间序列预测模型
  • G2O 通过工厂函数类 OptimizationAlgorithmFactory 来生成固定搭配的优化算法
  • 手机USB连接不显示内部设备,设备管理器显示“MTP”感叹号,解决方案
  • SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?
  • RabbitMQ 入门到精通指南
  • ARM base instruction -- movz
  • 安装jdk安装开发环境与maven
  • openpnp - 图像传送方向要在高级校正之前设置好