题目来源:

https://leetcode.com/problems/gas-station/description/

题目描述:

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

You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1).

You begin the journey with an empty tank at one of the gas stations.

Return the starting gas station's index if you can travel around the circuit once in the clockwise direction, otherwise return -1.

Note:

  • If there exists a solution, it is guaranteed to be unique.
  • Both input arrays are non-empty and have the same length.
  • Each element in the input arrays is a non-negative integer.

Example 1:

Input:
gas  = [1,2,3,4,5]
cost = [3,4,5,1,2]Output: 3Explanation:
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: -1Explanation:
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.

题意分析:

有一个加油站序列,排成环形,一辆汽车从某个加油站开始,顺时针(沿数组下标增长方向)逐个到达每个加油站,gas[x] 为加油站x的汽油,cost[x] 为从加油站x到下一个加油站消耗的汽油。如果存在一个加油站,从这个加油站出发,沿顺时针行进最终可以回到原点,那么返回这个加油站序号;如果从任意一个加油站开始都无法回到原点,则返回-1。(题目表示:只有唯一的一个加油站可以回到原点,也就是只有唯一解)

解题思路:

  1. 显然,如果加油站汽油总量小于路程消耗的汽油总量,那么不可能存在一个起点加油站,使汽车可以返回原点。所以算法首先判断加油站汽油总量是否小于路程消耗的汽油总量,如果是,则无解,算法结束。
  2. 如果加油站汽油总量不小于路程消耗的汽油总量,那么一定存在一个起点加油站,使汽车可以返回原点,从下面的证明我们还可以找到起点是哪一个。
  3. 证明:假设汽车汽油量为零甚至是负数依然可以行驶,且总共有n个加油站,假设从第一个加油站出发(数组下标为0),我们知道,当通过最后一个加油站(数组下标为n-1)到达原点时(0),汽车剩余的油量gas一定是大于0的(gas >= 0)。我们称这个过程中到达一个加油站时汽油量gas最少的时刻为最艰难的时刻,那么我们就选择最艰难的时刻作为起点,那么容易知道,往后将没有任何节点可以使gas小于0。
  4. 我们还可以画图证明,横轴是加油站编号,纵轴是汽车到达下一个加油站的时刻剩余的汽油量。具体可以看我在LeetCode讨论中提交的答案。(O(n) time and O(1) space python solution with new idea andexplanation)

实现代码(Python3):

class Solution:def canCompleteCircuit(self, gas, cost):""":type gas: List[int]:type cost: List[int]:rtype: int"""if sum(gas) < sum(cost):return -1start, total, Min = 0, 0, sys.maxsizefor i in range(len(gas)):total += gas[i] - cost[i]if total < Min:start = (i + 1)%len(gas)Min = totalreturn start

提交结果:

LeetCode 134.Gas Station 解题分析相关推荐

  1. LeetCode 134 Gas Station

    LeetCode 134 Gas Station 水题,暴力一下就ok class Solution { public:int tag[100005];int sum[100005];int canC ...

  2. LeetCode 134. Gas Station

    LeetCode 134. Gas Station Solution1:我的答案,无数次试错得到的,不成系统,没有思路.. 时间复杂度O(n2)O(n2)O(n^2) class Solution { ...

  3. 134. Gas Station加油站

    [抄题]: There are N gas stations along a circular route, where the amount of gas at station i is gas[i ...

  4. [Leetcode] 774. Minimize Max Distance to Gas Station 解题报告

    题目: On a horizontal number line, we have gas stations at positions stations[0], stations[1], ..., st ...

  5. 134. Gas Station 加油站

    在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...

  6. 加油python_力扣——gas station (加油站) python实现

    题目描述: 中文: 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] ...

  7. [leetcode] Gas Station

    题目描述: There are N gas stations along a circular route, where the amount of gas at stationi is gas[i] ...

  8. Leetcode 774. Minimize Max Distance to Gas Station

    LWC 69: 774. Minimize Max Distance to Gas Station 传送门:774. Minimize Max Distance to Gas Station Prob ...

  9. PAT甲级1072 Gas Station (30 分):[C++题解]dijkstra算法、最短路

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 所有的dist[ ]都≤Ds:最小的dist[ ]最大; dist[ ] 总和最大. 由于加油站是字符,为了简单起见,将m个加油站编 ...

最新文章

  1. sketch如何做设计稿交互_当屏幕可以折叠,交互设计怎么做
  2. echarts 在两点之间画一条线_凭什么?辛辛苦苦画了三个小时,却换来一句“撕了重画”...
  3. windows下tomcat自动定时重启方法
  4. Newtonsoft.Json 的序列化与反序列化
  5. Android、Java验证手机号是否合法
  6. 【转】sql表及字段命名规范
  7. robcad和catia是什么关系_proe/CATIA/UG/SolidWorks软件区别与联系
  8. MySQL10061错误Access denied for user root@localhost(Windows下)
  9. java判断线段是否相交函数_计算几何-判断线段是否相交
  10. sql中in与=的异同
  11. iOS UIView视图的图层控制
  12. Caused by: java.lang.ClassNotFoundException: backtype.storm.topology.IRichSpout
  13. 【显卡天梯图】2014年最新显卡天梯图 – 【迄今最全系列显卡】
  14. c php数据,PHP如何与C进行数据交互
  15. size-constrained-clustering
  16. 51单片机~红外通信工作原理
  17. 2022-2028年中国数字示波器行业市场调查研究及投资策略研究报告
  18. golang使用image包及draw.Draw合成图片
  19. spring boot开发入门
  20. Window系统 cd命令

热门文章

  1. 生成6位纯数字验证码的三种方式
  2. 【数据库系统01】强制存取控制
  3. 【原创】火狐浏览器网页翻译
  4. Zprotect patch KEY 脱壳
  5. nginx依靠超时时间实现上游负载web服务器重启时不影响访问
  6. android修改默认遥控器键值,RK3128平台android系统修改添加遥控器键值码值
  7. 【97期分享】4款复古风PPT模板免费下载
  8. Android Webview历史高危漏洞与攻击面分析
  9. 如何在label上显示字_如何地图上标注店面_新开的店铺要怎样上地图显示_怎么将公司标记在地图...
  10. 从现在开始就是最早的开始