news 2026/6/15 18:27:53

贪心法求经典算法题——最低加油次数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪心法求经典算法题——最低加油次数

思路和算法

用 n 表示数组 stations 的长度,即加油站的个数。行驶的过程中依次到达 n+1 个位置,分别是 n 个加油站和目的地。为了得到最少加油次数,应该在确保每个位置都能到达的前提下,选择最大加油量的加油站加油。

为了得到已经到达过的加油站中的最大加油量,需要使用优先队列记录所有已经到达过的加油站的加油量,优先队列中的最大元素位于队首,即每次从优先队列中取出的元素都是优先队列中的最大元素。

从左到右遍历数组 stations ,对于每个加油站,首先判断该位置是否可以达到,然后将当前加油站的加油量添加到优先队列中。对于目的地,则只需要判断是否可以达到。

具体做法如下:

1.计算当前位置(加油站或目的地)与上一个位置的距离之差,根据该距离之差得到从上一个位置行驶到当前位置需要使用的汽油量,将使用的汽油量从剩余的汽油量中减去。

2.如果剩余的汽油量小于 0 ,则表示在不加油的情况下无法从上一个位置行驶到当前位置,需要加油。取出优先队列中的最大元素加到剩余的汽油量,并将加油次数加 1,重复该操作直到剩余的汽油量大于等于 0 或优先队列变为空。

3.如果优先队列变为空时,剩余的汽油量仍小于 0 ,则表示在所有经过的加油站加油之后仍然无法到达当前位置,返回 −1 。

4.如果当前位置是加油站,则将当前加油站的加油量添加到优先队列中,并使用当前位置更新上一个位置。

如果无法到达目的地,则在遍历过程中返回 −1 。如果遍历结束仍未返回 −1 ,则可以到达目的地,返回加油次数。

代码

Python3

class Solution: def minRefuelStops(self, target: int, startFuel: int, stations: List[List[int]]) -> int: n = len(stations) ans, fuel, prev, h = 0, startFuel, 0, [] for i in range(n + 1): curr = stations[i][0] if i < n else target fuel -= curr - prev while fuel < 0 and h: fuel -= heappop(h) ans += 1 if fuel < 0: return -1 if i < n: heappush(h, -stations[i][1]) prev = curr return ans
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 18:25:04

如何实现多认证源共存:MultiLogin重构Minecraft服务器登录体系

如何实现多认证源共存&#xff1a;MultiLogin重构Minecraft服务器登录体系 【免费下载链接】MultiLogin 外置共存 项目地址: https://gitcode.com/gh_mirrors/mu/MultiLogin MultiLogin作为一款专为Minecraft代理端设计的创新插件&#xff0c;彻底解决了服务器管理员面临…

作者头像 李华
网站建设 2026/6/15 18:23:49

Illustrator脚本革命:突破性30+工具让你的设计效率提升10倍

Illustrator脚本革命&#xff1a;突破性30工具让你的设计效率提升10倍 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中的重复性操作而烦恼吗&#xff1f;…

作者头像 李华
网站建设 2026/6/15 18:19:59

MPC866 SCC HDLC模式实战:寄存器配置、总线模式与调试指南

1. 项目概述&#xff1a;深入MPC866 SCC的HDLC模式在嵌入式通信系统的开发中&#xff0c;数据链路层的可靠实现往往是决定产品稳定性的关键。无论是工业现场总线、网络设备的背板通信&#xff0c;还是早期的广域网接入&#xff0c;HDLC协议都扮演着基石的角色。然而&#xff0c…

作者头像 李华
网站建设 2026/6/15 18:13:49

简单粗暴的图片合并两步走

仅供参考第一步&#xff1a;打开word→插入所有图片→另存为网页html格式第二步&#xff1a;使用microsoft edge打开网页→右上角三个点→截图→捕获整页→右上角保存图标保存

作者头像 李华