【反悔堆】【hard】力扣871. 最低加油次数

news/2025/1/31 5:07:45/

汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。

沿途有加油站,用数组 stations 表示。其中 stations[i] = [positioni, fueli] 表示第 i 个加油站位于出发位置东面 positioni 英里处,并且有 fueli 升汽油。

假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。

为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回 -1 。

注意:如果汽车到达加油站时剩余燃料为 0,它仍然可以在那里加油。如果汽车到达目的地时剩余燃料为 0,仍然认为它已经到达目的地。

地,则返回 -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 升。然后开车抵达目的地。
沿途在两个加油站停靠,所以返回 2 。

在这里插入图片描述

反悔堆

class Solution {
public:int minRefuelStops(int target, int startFuel, vector<vector<int>>& stations) {int ans = 0;priority_queue<int> q;int n = stations.size();int prev = 0, fuel = startFuel;for(int i = 0; i <= n; i++){int curr = i < n ? stations[i][0] : target;fuel -= curr - prev;while(fuel < 0 && !q.empty()){fuel += q.top();q.pop();ans++;}if(fuel < 0){return -1;}if(i < n){q.emplace(stations[i][1]);prev = curr;}}return ans;}
};

我们需要经过n+1个地方,分别是n个加油站和终点。
我们遍历每个经过的加油站以及终点,我们用curr和prev来记录相邻两个地方之间的距离,如果油够经过这段距离,我们就不用进行操作,只要将当前加油站油的数量加入到优先队列q中即可。如果油不够经过这段距离,那么我们就需要在之前的加油站进行加油,我们优先在有最多油的加油站加油,也就是q.top(),并且记录ans,直到油够经过这段距离位置。如果q已经空了,但是油还是不够用,那么就返回-1。


http://www.ppmy.cn/news/1568070.html

相关文章

蓝桥杯算法日常|c\c++常用竞赛函数总结备用

一、字符处理相关函数 大小写判断函数 islower和isupper&#xff1a;是C标准库中的字符分类函数&#xff0c;用于检查一个字符是否为小写字母或大写字母&#xff0c;需包含头文件cctype.h&#xff08;也可用万能头文件包含&#xff09;。返回布尔类型值。例如&#xff1a; #…

C++ Lambda 表达式的本质及原理分析

目录 1.引言 2.Lambda 的本质 3.Lambda 的捕获机制的本质 4.捕获方式的实现与底层原理 5.默认捕获的实现原理 6.捕获 this 的机制 7.捕获的限制与注意事项 8.总结 1.引言 C 中的 Lambda 表达式是一种匿名函数&#xff0c;最早在 C11 引入&#xff0c;用于简化函数对象的…

INCOSE需求编写指南-附录 D: 交叉引用矩阵

附录 Appendix D: 交叉引用矩阵 Cross Reference Matrices Rules to Characteristics Cross Reference Matrix NRM Concepts and Activities to Characteristics Cross Reference Matrix Part 1 NRM Concepts and Activities to Characteristics Cross Reference Matrix Part…

计算机网络 (54)系统安全:防火墙与入侵检测

前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统&#xff08;IDS&#xff09;是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备&#xff0c;它…

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…

pytorch逻辑回归实现垃圾邮件检测

完整代码&#xff1a; import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import numpy as…

如何实现gitlab和jira连通

将 GitLab 和 Jira 集成起来可以实现开发任务与代码变更的联动&#xff0c;提高团队协作效率。以下是实现两者连通的详细步骤&#xff1a; 1. 确保必要条件 在进行集成之前&#xff0c;确保以下条件满足&#xff1a; 你有 GitLab 和 Jira 的管理员权限。Jira 是 Jira Cloud 或…

探索WPF中的RelativeSource:灵活的资源绑定利器

探索WPF中的RelativeSource&#xff1a;灵活的资源绑定利器 在WPF&#xff08;Windows Presentation Foundation&#xff09;开发中&#xff0c;资源绑定是一个强大且灵活的功能&#xff0c;它允许开发者将UI元素与数据源动态关联。而RelativeSource则是WPF中一个非常有用的工…