方法一:直接暴力方法

解题思路:

当 gas[i] >= cost[i] 时,这个加油站才可能是个出发点,遍历gas容器(数组),当出现 gas[i] >= cost[i] 时,看看以这个加油站为出发点,是否满足条件,即执行函数whetherEnough,如果满足,就得到结果了,返回索引 i 即可,否则,继续寻找下一个可能的出发点。

在whetherEnough函数中,因为是个环形线路,所以先访问 i 后面的加油站,再访问 i 前面的加油站。中途一旦遇到剩余的油量为负,则这条路不通,返回false。

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {//遍历gas和cost,gas[i] >= cost[i]的时候,i才可能为出发的加油站编号for(int i = 0; i < gas.size(); i++){if(gas[i] >= cost[i]){  //可能是个出发点if(whetherEnough(i, gas, cost)) return i;}}return -1;}bool whetherEnough(int n, const vector<int> gas, const vector<int> cost){//输入的i为出发站, int i = n;int save = 0;while(i < gas.size()){save += (gas[i] - cost[i]);if(save < 0) return false;else i++;}for(int j = 0; j < i; j++){save += (gas[j] - cost[j]);if(save < 0) return false;}return true;}
};

方法二:有点技巧

解题思路:

遍历gas容器(数组),分别要做两件事情:一是用变量save来记录剩余油量;二是要找到油量从负变为正的加油站点,即要用start来记录出发加油站点。

我们思考一下为什么会让出发站点放在中间,就是因为前面的数,gas加起来要小于cost,消耗多于供给。而起点后面的加油站,总供给要多于消耗,这样才能走完整个环路。

如果前面的加油站中,debt累加起来是正值,说明之前记录的start位置没有问题,如果出现了debt为负值,说明前面的加油站供给不足,要更新start变量。

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int start = 0;int save = 0;int debt = 0;for(int i = 0; i < gas.size(); i++){save += gas[i] - cost[i];debt += gas[i] - cost[i];if(debt < 0){start = i + 1;debt = 0;}}if(save >= 0) return start;else return -1;}
};

Leetcode 134. 加油站 解题思路及C++实现相关推荐

  1. Leetcode 279. 完全平方数 解题思路及C++实现

    两种都是动态规划的方法,但第一种比较暴力和愚蠢,第二种利用了完全平方数. 方法一:无脑动态规划,会超时 解题思路: 利用一维数组存储 n 个整数的结果. 首先要判断 i 是不是 就是一个完全平方数,如 ...

  2. Leetcode 207. 课程表 解题思路及C++实现

    解题思路: 这是一个判断是否是有向无环图的题,也是拓扑排序题,网上的解决方案大多是从图的角度来解释的,比较复杂,下面先不管图论的内容,直接就深度优先搜索的方法来思考. 首先是建立一个graph,有多少 ...

  3. Leetcode 179. 最大数 解题思路及C++实现

    解题思路: 使用C++中的优先队列priority_queue,通过自定义比较函数cmp,来对nums数组进行排序.最后按排序结果,顺序将nums中的数push_back进字符串res中,即得到结果. ...

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

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

  5. LeetCode 134. 加油站(贪心)

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

  6. leetcode 134. 加油站 思考分析

    目录 题目 1.暴力法,双层遍历 2.贪心 题目 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站 ...

  7. LeetCode 134 加油站 全面详细题解【持续更新所有解法】

    题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/gas-station 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. ...

  8. 168. Leetcode 134. 加油站 (贪心算法-模拟题目)

    class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:cur_rest_acc ...

  9. leetcode 134. 加油站(Gas Station)

    目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+ ...

最新文章

  1. python画图颜色表示大小变化_python画图(线条颜色、大小、类型:点、虚线等)(图文详细入门教程四)...
  2. JS删除String里某个字符的方法
  3. 阿里docker安装mysql_docker安装mysql
  4. oracle10g执行insert,oracle 10g 增强审计。表insert 及bind values
  5. vb 通过php连接mysql数据库连接_vb如何mysql数据库连接
  6. pat09-散列3. Hashing - Hard Version (30)
  7. mysql 存储时间 时间戳_具体场景下MySQL中用“时间戳”存储时间的问题
  8. HDU2602(背包)
  9. Oracle采用自己的公有云作为ZFS阵列的后端存储
  10. 原 matplotlib命令与格式:系统字体与显示中文
  11. 【原创】PDA 实现DataGrid可编辑
  12. Linux常用命令之:软件安装命令
  13. linux 怎么查看谁登过这台服务器,如何查看linux服务器是否被入侵
  14. 大数据Top K问题
  15. 1056. Confusing Number
  16. qt实现视频播放器,基本功能都有,可以当毕设用
  17. java ews appointment_ews-java-api学习:新建Recurring Appointment
  18. java基于ssm的自助旅游管理系统
  19. su切换为root并输入root密码确定正确但会有卡顿并提示su: Permission denied
  20. GYM 100827 I.Salary Inequity(线段树)

热门文章

  1. java不四舍五入_JAVA-四舍五入之坑
  2. field list什么意思_从源码中学Vue(六)「解密」为什么操作数组的方法也会触发视图更新...
  3. win服务器系统程序原因分析
  4. 自顶向下彻底理解 Java 中的 Synchronized
  5. Java基础05 实施接口
  6. 面试(之)三赴上海易传媒—揭秘之旅
  7. 移动机器人平台的坐标系---map,odom,base_link
  8. 高通android开源代码下载
  9. android 串口调试
  10. Mato的文件管理 (莫队)题解