title: 加油站(贪心)
date: 2022-04-29 14:43:09
categories: LeetCode
tags:

  • 贪心
  • 每天进步一点点系列

题目

加油站

难度 中等

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

【微信公众号每日较早更新,更有每日单词系列】

示例 1:

输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
输出: 3
解释:
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
因此,3 可为起始索引。

示例 2:

输入: gas = [2,3,4], cost = [3,4,3]
输出: -1

解释:
你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油
开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
因此,无论怎样,你都不可能绕环路行驶一周。

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

代码:

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {//先排除特殊情况if(gas == null || cost == null || gas.length == 0 || cost.length == 0){return -1;}if(gas.length == 1 && cost[0]== gas[0]){return 0;}//剩余的数组int[] last = new int[gas.length];//起点的可能位置列表List<Integer> list = new ArrayList<>();int sum = 0;for (int i = 0; i < gas.length; i++) {last[i] = gas[i] - cost[i];sum+=last[i];if(last[i]>0){list.add(i);}}//不可能跑一圈if(sum<0){return -1;}int res = -1;//遍历所有的可能节点for (Integer i : list) {boolean[] flag = new boolean[gas.length];flag[i] = true;int curr = i;int j=0;sum = last[curr];//跑圈for(j=0;j<gas.length;j++){int next = curr+1==gas.length?0:curr+1;sum +=last[next];//油不够了if(sum < 0){break;}curr = curr+1==gas.length?0:curr+1;}//可以跑一圈if(j==gas.length){return i;}}return res;}
}

精简代码:

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int start = 0, sum = 0, tank = 0;for (int i = 0; i < gas.length; i++) {tank += gas[i] - cost[i];if (tank < 0) {start = i + 1;sum += tank;tank = 0;}}return sum + tank >= 0 ? start : -1;}
}

以上就是加油站(贪心)【LeetCode】的全部内容

版权声明:keafmd
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/

看完如果对你有帮助,感谢点击下面的一键三连支持!
[哈哈][抱拳]


加油!

共同努力!

Keafmd

都看到这里了,下面的内容你懂得,让我们共同进步!

加油站(贪心)【LeetCode】相关推荐

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

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

  2. 加油站-贪心134-python

    class Solution:def canCompleteCircuit(self, gas, cost):# 如果总加油量小于总耗油量,那一定无法行驶一周# 反之则一定可以行驶一周if sum(g ...

  3. [leetcode] 总结篇

    刷题推荐:https://programmercarl.com/ C++ 必备知识: vector 用法 unordered_set 与 unordered_map string 字符串操作 sort ...

  4. LeetCode 所有题目总结

    文章目录 做题注意事项 题目分类 1.位运算 2.字符串题型 3.TopK 问题--最大堆/最小堆 4.链表 5.动态规划 easy Medium hard 6.贪心 7.树 8.图 9.数学题 10 ...

  5. Leetcode学习之动态规划

    动态规划学习内容 1. 动态规划理论基础 什么是动态规划 动态规划的解题步骤 动态规划应该如何debug 2. 斐波那契数 思路 3. 爬楼梯 思路 4. 使用最小关系爬楼梯 思路 5. 不同路径 思 ...

  6. LeetCode按知识点刷题,额外附带题解

    刷题顺序转自:ACM金牌选手整理的[LeetCode刷题顺序]_清澈不在远方-CSDN博客 题解为本人自刷 数据结构 数组&双指针 LeetCode 1. 两数之和 /*** 给定一个整数数组 ...

  7. 动态规划-重叠区间2020.3.30

    1.水 贪心算法 || 区间重叠问题 2.水重叠区间问题 3.水 算法练习:重叠区间个数 4.真·贪心,但只知其用,不知其理 leetCode435 5.详细贪心Leetcode 435:无重叠区间( ...

  8. 《一个大学生的学习笔记》

    o(*≧▽≦)ツ 我从19年5月开始决定写博客的原因: 记录学过的知识,平时遇到的问题.踩过的坑和解决方案 督促自己学习,提高自己的技术写作能力和思维能力(我是弱比) 记录成长之路,方便以后回顾学过的 ...

  9. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  10. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

最新文章

  1. 2019求职面经推荐(算法工程师-来自知乎某位大佬)
  2. Nodejs+Express学习二(Mongoose基础了解)
  3. js-在url后面添加时间戳清除浏览器打开页面的缓存
  4. linux的本地时间命令
  5. shell学习之shell执行方式及排错
  6. 会话管理之session技术
  7. Redhat7.2上编译Linux内核源码
  8. C++中的vector使用范例-
  9. oracle 效率问题,Oracle【诡异】的效率问题
  10. 现代计算机三大科学计算,基于三维重建过程中纹理映射问题的研究
  11. 【H264/AVC 句法和语义详解】(五):Exp-Golomb指数哥伦布编码(理论篇)
  12. Changing scope values asynchronously - updates don't propagate without .apply()
  13. 通过超分辨率重构来提高二维码的对比度
  14. 张清:心静,写在年末
  15. android 系统dialog的应用
  16. Spring常用注解(绝对经典)
  17. 神经网络在科研中的应用,基于神经网络的论文
  18. CTS 使用instrumentation命令测试
  19. PD QC充电器XP06诱骗取电9V 12V 15V 20V原理
  20. 阿里云ACE北京同城会-景山活动

热门文章

  1. Spring Boot编程思想 核心篇 小马哥
  2. 推荐系统论文阅读:Entire Space Multi-Task Model
  3. QT项目--简易音乐播放器
  4. 辽宁大连最好的计算机大学排名,2020年大连市最好大学排行榜:20所高校上榜,东北财经大学居第二...
  5. spring mvc 扫描与注解
  6. 20162327WJH实验四——图的实现与应用
  7. P2627 [USACO11OPEN]Mowing the Lawn G 题解(单调队列+dp)
  8. 符号三角形问题 java_算法java实现--回溯法--符号三角形问题
  9. 【Day2.1】时差为看日出创造了条件
  10. 纯前端word导出echarts图表