题目描述

环形路上有n个加油站,第i个加油站的汽油量是gas[i].
你有一辆车,车的油箱可以无限装汽油。从加油站i走到下一个加油站(i+1)花费的油量是cost[i],你从一个加油站出发,刚开始的时候油箱里面没有汽油。
求从哪个加油站出发可以在环形路上走一圈。返回加油站的下标,如果没有答案的话返回-1。
注意:
答案保证唯一。

思路

其实比较容易想到,如果我随便选个起点,然后选择它的下一个加油站为终点,然后计算剩余油量,如果始终是大于零,终点就往后移,直到最后终点又跑到了起点的位置,说明我们的起点是合适的,就是最终的下标。但是世事不尽如人意,哪里那么合适,一旦我们发现剩余油量小于零之后,那么说明这个起点是不行的了,我们应该把起点回退,重新再试,注意,这个时候,已经计算过的路程是没有必要再计算了,所以终点仍然是在那里,起点回退,一旦到了剩余油量又有了,那么终点继续往后移。直到所有的点遍历完全,这个就是整体的思路了。
但是我们想想,如果起点在下标为0的位置,它回退,往哪里退呢,这是个数组,退到最后一个,最后一个又往前退,这个实现起来就比较繁琐了,最妙的思路就来了:我们如果一开始就把start设置在最后一个下标,而把end设置在它的下一个,也就是第0个下标处,那么这个繁琐的事情是不是就省去了???多么地美妙,听起来多么地顺耳。

所以精髓处已经标了出来,其余的,简直是小儿科了。

class Solution {public:int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {int start = gas.size()-1;int end = 0;int sum = gas[start]-cost[start];while(end<start){if (sum>=0){sum += gas[end]-cost[end];end ++;}else{start--;sum += gas[start]-cost[start];}}return (sum<0) ? -1: start;}
};

leetcode每日一道(15)环形路上加油站起点问题,绝妙思路相关推荐

  1. leetcode每日一道(3)最多能有多少个点位于同一直线上

    题目 对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上 Given n points on a 2D plane, find the maximum number of poin ...

  2. 使用java判断环形链表的起点,Leetcode 142题

    判断环形链表的起点(java语言)Leetcode 142题 Leetcode 142题 判断环形链表的起点 在这里我们是使用快慢指针 (双指针) 的方式来解决此问题. ​ 我们设置一个慢指针指向头结 ...

  3. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  4. 每日一道leetcode(python)48. 旋转图像

    每日一道leetcode(python)48. 旋转图像 2021-07-27 给定一个 n × n 的二维矩阵 matrix 表示一个图像.请你将图像顺时针旋转 90 度. 你必须在 原地 旋转图像 ...

  5. leetcode最小面积_每日一道 LeetCode (51):盛最多水的容器

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  6. php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...

    每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...

  7. atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  8. c++两个数组对比去掉重复的元素_每日一道 LeetCode (8):删除排序数组中的重复项和移除元素...

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  9. 每日一道 LeetCode (16):求 x 的平方根

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

最新文章

  1. 【译】理解Javascript函数执行—调用栈、事件循环、任务等
  2. java绘制流程图_如何才能更好地绘制计算机毕业设计中各种图表
  3. UE4次世代的移动平台渲染技术
  4. rocketmq java实战_RocketMQ实战与原理解析 杨开元著 PDF下载
  5. Linux shell脚本详解及实战(五)——shell脚本函数
  6. 【蓝桥杯Java组】数论基础—素数筛、最大公约数、最小公倍数
  7. 谷歌浏览器主题背景图片保存方法
  8. excel求方差和标准差的函数_excel标准差函数是什么?怎么计算?
  9. Nginx搭建视频点播和视频直播服务器
  10. Flutter混编工程之高速公路Pigeon
  11. 写一个京东最顶部的导航条
  12. 流量卡之家:5G从概念到落地,未来工厂触手可及
  13. 电脑可以上网但网络显示感叹号无Internet的解决办法
  14. 联想拯救者r7000p安装Linux双系统(二)
  15. Android 图形架构 之三—— 创建Layer、Surface、SurfaceControl
  16. DDR/GDDR和HBM区别,及内存标准如何选择?
  17. 2020年河南高考--各高校在河南录取分数线预测(本科二批——文科)
  18. keytool 错误:java.io.IOException:Incorrect AVA format
  19. linux设置网络 命令,Linux网络配置相关命令
  20. 泛海微电动修脚器开发方案和电动修脚器单片机方案

热门文章

  1. Python反编译pyinstaller或py2exe生成的exe可执行文件,获得源码
  2. ES 6.8.15 安装
  3. 复制文件夹下所有文件(包括子文件夹),到一个文件夹
  4. 一键自动整理文件!简单好用的 Python 脚本
  5. html5 --- 根据屏幕宽度加载不同的html、css或是javascript
  6. 软件工程之uni-app技术调研
  7. maven执行原理及插件解析
  8. mybatis 分页
  9. 苹果 AR 新专利马上登陆 Facetime|Facebook 要用 VR 玩直播
  10. 苹果iOS13.4.1发布,支持新旧苹果产品用户间进行FaceTime通话