加油站(贪心)【LeetCode】
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】相关推荐
- 168. Leetcode 134. 加油站 (贪心算法-模拟题目)
class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:cur_rest_acc ...
- 加油站-贪心134-python
class Solution:def canCompleteCircuit(self, gas, cost):# 如果总加油量小于总耗油量,那一定无法行驶一周# 反之则一定可以行驶一周if sum(g ...
- [leetcode] 总结篇
刷题推荐:https://programmercarl.com/ C++ 必备知识: vector 用法 unordered_set 与 unordered_map string 字符串操作 sort ...
- LeetCode 所有题目总结
文章目录 做题注意事项 题目分类 1.位运算 2.字符串题型 3.TopK 问题--最大堆/最小堆 4.链表 5.动态规划 easy Medium hard 6.贪心 7.树 8.图 9.数学题 10 ...
- Leetcode学习之动态规划
动态规划学习内容 1. 动态规划理论基础 什么是动态规划 动态规划的解题步骤 动态规划应该如何debug 2. 斐波那契数 思路 3. 爬楼梯 思路 4. 使用最小关系爬楼梯 思路 5. 不同路径 思 ...
- LeetCode按知识点刷题,额外附带题解
刷题顺序转自:ACM金牌选手整理的[LeetCode刷题顺序]_清澈不在远方-CSDN博客 题解为本人自刷 数据结构 数组&双指针 LeetCode 1. 两数之和 /*** 给定一个整数数组 ...
- 动态规划-重叠区间2020.3.30
1.水 贪心算法 || 区间重叠问题 2.水重叠区间问题 3.水 算法练习:重叠区间个数 4.真·贪心,但只知其用,不知其理 leetCode435 5.详细贪心Leetcode 435:无重叠区间( ...
- 《一个大学生的学习笔记》
o(*≧▽≦)ツ 我从19年5月开始决定写博客的原因: 记录学过的知识,平时遇到的问题.踩过的坑和解决方案 督促自己学习,提高自己的技术写作能力和思维能力(我是弱比) 记录成长之路,方便以后回顾学过的 ...
- 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7
https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...
- taoqick 搜索自己CSDN博客
L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...
最新文章
- 2019求职面经推荐(算法工程师-来自知乎某位大佬)
- Nodejs+Express学习二(Mongoose基础了解)
- js-在url后面添加时间戳清除浏览器打开页面的缓存
- linux的本地时间命令
- shell学习之shell执行方式及排错
- 会话管理之session技术
- Redhat7.2上编译Linux内核源码
- C++中的vector使用范例-
- oracle 效率问题,Oracle【诡异】的效率问题
- 现代计算机三大科学计算,基于三维重建过程中纹理映射问题的研究
- 【H264/AVC 句法和语义详解】(五):Exp-Golomb指数哥伦布编码(理论篇)
- Changing scope values asynchronously - updates don't propagate without .apply()
- 通过超分辨率重构来提高二维码的对比度
- 张清:心静,写在年末
- android 系统dialog的应用
- Spring常用注解(绝对经典)
- 神经网络在科研中的应用,基于神经网络的论文
- CTS 使用instrumentation命令测试
- PD QC充电器XP06诱骗取电9V 12V 15V 20V原理
- 阿里云ACE北京同城会-景山活动
热门文章
- Spring Boot编程思想 核心篇 小马哥
- 推荐系统论文阅读:Entire Space Multi-Task Model
- QT项目--简易音乐播放器
- 辽宁大连最好的计算机大学排名,2020年大连市最好大学排行榜:20所高校上榜,东北财经大学居第二...
- spring mvc 扫描与注解
- 20162327WJH实验四——图的实现与应用
- P2627 [USACO11OPEN]Mowing the Lawn G 题解(单调队列+dp)
- 符号三角形问题 java_算法java实现--回溯法--符号三角形问题
- 【Day2.1】时差为看日出创造了条件
- 纯前端word导出echarts图表