1.贪心策略:

总存在一个加油站,仅用它的油就足够跑到下一个加油站(否则所有加油站的油量加起来将不够全程)。把下一个加油站的所有油都提前搬到这个加油站来,并把油已被搬走的加油站无视掉。在剩下的加油站中继续寻找油量足以到达下个加油站的地方,不断合并加油站,直到只剩一个加油站为止。显然从这里出发就能顺利跑完全程。

2.贪心选择性:

  每次选择邮箱足以到达下个加油站的地方。

归纳法证明:

  对于任意节点i,假设i能够到达下一个节点,那么以该节点作为起始点。

如果顺利到达第k个节点后,那么说明油箱里面油量>=0;

那么从k节点出发,选择加上第k+1个加油站油量能够到达下一个加油站,说明能够进入下一个加油站。

3.优化子结构:

  记已走的路程节点集合为A’,环路所有节点为A,当前油箱剩余油量为left,当前节点汽油gas[i],则优化子结构为A’= A’U {i+1},i+1为下一节点,且保证left+gas[i]>=cost[i]。

证明:

   如果i+1的节点不是优化子节点,那么存在一个节点j为最优子节点,那么此时也存在left+gas[j]>=cost[j],但是由于路线为环形路线,只有一个节点与之相连,所以此时与存在节点j相矛盾,所以j不存在,即i+1为最优点。

4.伪代码:

  function canCompleteCircuit

sum = 0;

total = 0;

j = -1;

for i = 0 to gas.length

{

sum += gas[i] - cost[i];

total += gas[i] - cost[i];

if(sum < 0) {   //之前的油量不够到达当前加油站

j = i;

sum = 0;

}

}

if (total < 0) return -1; //所有加油站的油量都不够整个路程的消耗  

     else return j + 1;  

算法复杂度:O(n)

环路上有N个加油站,每个加油站有汽油gas[i],从每个加油站到下一个消耗cost[i],求到从哪儿个加油站出发相关推荐

  1. 用java写一个汽车加油的程序_Java实现 LeetCode 134 加油站

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

  2. C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题

    1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈:下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序. 考虑问题: 报到T的人出圈,怎么表示出 ...

  3. 一个环由个圈组成,把自然数1,2,…,N分别放在每一个圆内,数字的在两个相邻圈之和应该是一个素数。 注意:第一圈数应始终为1。input: N(0~20)output:输出格式如下所示的样品。

    一个环由个圈组成,把自然数1,2,-,N分别放在每一个圆内,数字的在两个相邻圈之和应该是一个素数. 注意:第一圈数应始终为1. input: N(0~20) output:输出格式如下所示的样品.每一 ...

  4. 日常面试刷题9-29

    突然被腾讯爸爸捞起来打电话(48分钟左右) 1.自我介绍 面试官:我们这写c++哦 .我:没事我可以转 2.c/c++区别 3.c++的stl 4.c++多态 5.MySQL索引类型 b+,hash ...

  5. Gas Station (环形加油站)

    题目:有n个加油站首尾相连成一个圆,已知每个加油站的油量,以及从第i个加油站到第i+1个加油站需消耗的油量,问:能否开车从某个加油站出发,循环一圈又回到起点,如果可以返回出发的起点(车的邮箱容量是无限 ...

  6. 贪心算法--加油站问题

    一个汽车加满油后可以行使n千米,图中会经过一系列加油站,求到达最终加油的最少次数,给出每个加油站之间的距离. #include<stdio.h> #define n 7//n表示汽车加满油 ...

  7. 加油站(暴力+贪心)

    暴力方法 暴力的方法很明显就是O(n^2)的,遍历每一个加油站为起点的情况,模拟一圈. 如果跑了一圈,中途没有断油,而且最后油量大于等于0,说明这个起点是ok的. 暴力的方法思路比较简单,但代码写起来 ...

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

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

  9. Python入门教程NO.5 用python写个自动选择加油站的小程序

    本文涉及的 python 基础语法为:if 条件分支 Python 条件分支是通过一条或者多条语句的执行结果 True或者 False来决定是否执行相应的代码块. if 单向条件语法结构 if 单向条 ...

最新文章

  1. 华尔街风暴的深层原因
  2. 数学表达式解析器简介
  3. c++11的10个新特性
  4. 企业网络推广——企业网络有推广专员如何做好基本的网站优化布局
  5. 解决Ubuntu终端编辑时上下左右变成ABCD问题
  6. 【Laravel】Fatal error: Declaration of Illuminate\Container\Container::get($id) must be compatible
  7. 00x1 python分支循环
  8. 【CodeForces - 227B 】Effective Approach (STL,思维)
  9. 妖怪手帐获取服务器信息失败,妖怪手账闪退怎么办 卡在加载页面解决办法
  10. 互联网日报 | 字节跳动否认进军社区团购;中兴手机回归国内2C市场;华为公布5G商用一年成绩单...
  11. 5.2 C++中的原子操作和原子类型
  12. CString转char*的两种方法讨论
  13. 视频教程-CCNA趣味实战无线实验视频课程—含PPPOE、ADSL、CABLE等-思科认证
  14. 简述ip地址的abc类如何划分_IP地址ABC三类划分详细内容记录
  15. linux整人指令,六个愚人节Linux恶作剧
  16. 智能人体感应灯,微波雷达存在感应,智能照明技术方案
  17. MHA-结合MySQL半同步复制高可用集群(Centos7)
  18. 第31章 TIM—基本定时器—零死角玩转STM32-F429系列
  19. 2021-12-11每日刷题打卡
  20. 前程无忧爬虫,仅供学习使用

热门文章

  1. 微信电脑版的加密dat文件怎么转成jpg图片
  2. 为什么魂斗罗只有128KB却可以实现那么长的剧情?
  3. 触控科技陈昊芝:捕鱼达人装机量1亿 月活跃用户3246万
  4. MLX90640 热红外成像仪 热源检测 电子检修 热水管探测
  5. 【论文模型讲解】CLIP(Learning Transferable Visual Models From Natural Language Supervision)
  6. 廖雪峰讲python高阶函数求导_高阶函数 · 廖雪峰的Python3.x教程 · 看云
  7. 计算机毕业设计Java春暖养老网络平台(源码+系统+mysql数据库+lw文档
  8. java 面向对象入门1
  9. 七种武器:延迟队列的原理和实现总结
  10. GTA5故事模式进度同步