当前位置:网站首页>LeetCode 871. 最低加油次数
LeetCode 871. 最低加油次数
2022-07-04 18:53:00 【JIeJaitt】
汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。
沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。
假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。
当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。
为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回 -1 。
注意:如果汽车到达加油站时剩余燃料为 0,它仍然可以在那里加油。如果汽车到达目的地时剩余燃料为 0,仍然认为它已经到达目的地。
示例 1:
输入:target = 1, startFuel = 1, stations = [] 输出:0 解释:我们可以在不加油的情况下到达目的地。
示例 2:
输入:target = 100, startFuel = 1, stations = [[10,100]] 输出:-1 解释:我们无法抵达目的地,甚至无法到达第一个加油站。
示例 3:
输入:target = 100, startFuel = 10, stations = [[10,60],[20,30],[30,30],[60,40]] 输出:2 解释: 我们出发时有 10 升燃料。 我们开车来到距起点 10 英里处的加油站,消耗 10 升燃料。将汽油从 0 升加到 60 升。 然后,我们从 10 英里处的加油站开到 60 英里处的加油站(消耗 50 升燃料), 并将汽油从 10 升加到 50 升。然后我们开车抵达目的地。 我们沿途在1两个加油站停靠,所以返回 2 。
提示:
1 <= target, startFuel, stations[i][1] <= 10^90 <= stations.length <= 5000 < stations[0][0] < stations[1][0] < ... < stations[stations.length-1][0] < target
贪心题,证明起来比较困难,但是思路比较直接。
具体做法如下。
计算当前位置(加油站或目的地)与上一个位置的距离之差,根据该距离之差得到从上一个位置行驶到当前位置需要使用的汽油量,将使用的汽油量从剩余的汽油量中减去。
如果剩余的汽油量小于 000,则表示在不加油的情况下无法从上一个位置行驶到当前位置,需要加油。取出优先队列中的最大元素加到剩余的汽油量,并将加油次数加 111,重复该操作直到剩余的汽油量大于等于 000 或优先队列变为空。
如果优先队列变为空时,剩余的汽油量仍小于 000,则表示在所有经过的加油站加油之后仍然无法到达当前位置,返回 −1-1−1。
如果当前位置是加油站,则将当前加油站的加油量添加到优先队列中,并使用当前位置更新上一个位置。
class Solution {
public:
int minRefuelStops(int target, int startFuel, vector<vector<int>>& stations) {
stations.push_back({
target,0});
int res=0;
priority_queue<int> heap;
for (auto& p:stations) {
int x=p[0],y=p[1];
while(heap.size() && startFuel<x) {
startFuel += heap.top();
heap.pop();
res ++;
}
if (startFuel<x) return -1;
heap.push(y);
}
return res;
}
};
边栏推荐
- Actual combat simulation │ JWT login authentication
- Form组件常用校验规则-1(持续更新中~)
- HMM hidden Markov model and code implementation
- Free soldier
- C # better operation mongodb database
- 【历史上的今天】7 月 4 日:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生
- Six stones programming: about code, there are six triumphs
- 1009 product of polynomials (25 points) (PAT class a)
- Flet教程之 08 AppBar工具栏基础入门(教程含源码)
- What ppt writing skills does the classic "pyramid principle" teach us?
猜你喜欢

同事的接口文档我每次看着就头大,毛病多多。。。

B2B mall system development of electronic components: an example of enabling enterprises to build standardized purchase, sale and inventory processes

九齐NY8B062D MCU规格书/datasheet

Qt编写物联网管理平台38-多种数据库支持

Huawei Nova 10 series supports the application security detection function to build a strong mobile security firewall

如何让你的小游戏适配不同尺寸的手机屏幕

ICML 2022 | Meta提出鲁棒的多目标贝叶斯优化方法,有效应对输入噪声

TCP waves twice, have you seen it? What about four handshakes?

什么叫内卷?

#夏日挑战赛#带你玩转HarmonyOS多端钢琴演奏
随机推荐
What ppt writing skills does the classic "pyramid principle" teach us?
Basic use of kotlin
Aiming at the "amnesia" of deep learning, scientists proposed that based on similarity weighted interleaved learning, they can board PNAS
In the first month of its launch, the tourist praise rate of this campsite was as high as 99.9%! How did he do it?
Pytoch learning (4)
Prometheus installation
NLP、视觉、芯片...AI重点方向发展几何?青源会展望报告发布[附下载]
c# .net mvc 使用百度Ueditor富文本框上传文件(图片,视频等)
The company needs to be monitored. How do ZABBIX and Prometheus choose? That's the right choice!
Template_ Judging prime_ Square root / six prime method
Delete the characters with the least number of occurrences in the string [JS, map sorting, regular]
被奉为经典的「金字塔原理」,教给我们哪些PPT写作技巧?
TCP waves twice, have you seen it? What about four handshakes?
Flet tutorial 05 outlinedbutton basic introduction (tutorial includes source code)
实战模拟│JWT 登录认证
Kotlin inheritance
水晶光电:长安深蓝SL03的AR-HUD产品由公司供应
Why is the maximum speed the speed of light
泰山OFFICE技术讲座:关于背景(底纹和高亮)的顺序问题
FS4061A升压8.4V充电IC芯片和FS4061B升压12.6V充电IC芯片规格书datasheet