(贪心) 反悔贪心之反悔堆

文章目录

  • ⭐例题
    • 🚩题意与思路
  • ⭐返回贪心
    • 🚩原理(反悔池)
    • 🚩落实到题
    • 🚩AC code
  • ⭐练习题
  • ⭐END
    • 🌟交流方式

⭐例题

经典例题:

871. 最低加油次数

🚩题意与思路

题意:

从 0 开始,给出目的地target和其实油量startFuel

给出路途中的加油站的坐标和加油量(假设油箱可以无穷大,但每站只能加一次)。

问是否可以到达目的地。


很显然每个加油站都符合“加油”和“不加油”两个属性。很容易想到01背包

对于本题的数据范围 (5e2) 来说可以使用01背包来处理,但若数据范围增大 (1e4, 1e5),则会超时。

且本文不是为了讲动规的,因此不多介绍,但还是给出ac的示例代码。

一维 01背包 + 贪心

二维 01背包

⭐返回贪心

🚩原理(反悔池)

准备一个池子,称作反悔池,池中缓存在遍历过程中不断遇到的可选项作为备用资源。

在后续的遍历中,当需要资源的时候,不断的从池中获取,直到满足要求。


基本的原则就如此。

当然这个池子中的值,可以是已经选择了的,也可以是未选择的。都是基于具体题意而言的。

池的数据结构也是基于题目而言比较多样,一般都是堆,栈,队列等可进可出的数据结构。

🚩落实到题

对于本题(871. 最低加油次数),我们用一个来进行维护。

使用堆我们可以每次获得池中的最值,也就是我们每次能获得的最大加油量。

到达一个加油站储一次油(加入反悔堆中)。当我们不断要走下一步时,判断是否需要从反悔堆中获得之前没有获取的油。

当堆空了,且未到达目标时就是return -1;

🚩AC code

当然写法比较多样。

同一种思路或原理,笔者看了下以前的代码发现和现在的实现还是有一定差异的。

下方代码可以AC。

class Solution {
public:int minRefuelStops(int target, int startFuel,vector<vector<int>>& stations) {// 按照距离从小到达排序sort(stations.begin(), stations.end());int sum = startFuel;// 存储可能可以需要的油// 大顶堆,油多的在top// 贪心,每次获取经过地点中最大的priority_queue<int> pool;for (int i = 0; i < stations.size(); i += 1) {const int pos = stations[i][0];const int value = stations[i][1];// 位置>油箱的历史总量油// 需要从我们的除油池中获取while (sum < pos && !pool.empty()) {sum += pool.top();pool.pop();}if (sum < pos) {return -1;}// 当前这个点可以到,储油pool.push(value);if (sum >= target) {return (i + 1) - pool.size();}}while (sum < target && !pool.empty()) {sum += pool.top();pool.pop();}if (sum < target) {return -1;} else {return stations.size() - pool.size();}}
};

⭐练习题

ref:

分享丨【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树) - 力扣(LeetCode)

§5.5 反悔堆

  • 630. 课程表 III

  • 871. 最低加油次数 2074

  • 1388. 3n 块披萨 2410

  • 1642. 可以到达的最远建筑 1962

  • 2813. 子序列最大优雅度 2582

  • 3049. 标记所有下标的最早秒数 II 3111

  • LCP 30. 魔塔游戏




⭐END

🌟交流方式

⭐交流方式⭐ |C/C++|算法|设计模式|软件架构-CSDN社区

关注我,学习更多C/C++,python,算法,软件工程,计算机知识

B站:

👨‍💻主页:天赐细莲 bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1557124.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB与R语言在建模中的合作与应用(下篇)

目录 目录 模型训练的协同使用 1. 使用 R 语言进行统计建模 2. 使用 MATLAB 进行机器学习建模 模型评估与调优 1. 在 R 中评估模型性能 2. 在 MATLAB 中进行模型优化 实战示例&#xff1a;MATLAB 与 R 的协同建模 总结 在上篇文章中&#xff0c;我们介绍了 MATLAB 和 R…

2024兴国专转本长期集训产品发布!

9月13日&#xff0c;兴国教育2024长期集训产品发布会在江苏南京顺利召开。 成立于2002年的兴国品牌&#xff0c;时至今日&#xff0c;已经走过了二十二年。兴国新媒体发言人祁老师在发布会上&#xff0c;为大家介绍了兴国这二十年来的变化。 截至2024年8月&#xff0c;兴国在全…

论文阅读:Split-Aperture 2-in-1 Computational Cameras (二)

Split-Aperture 2-in-1 Computational Cameras (一) Coded Optics for High Dynamic Range Imaging 接下来&#xff0c;文章介绍了二合一相机在几种场景下的应用&#xff0c;首先是高动态范围成像&#xff0c;现有的快照高动态范围&#xff08;HDR&#xff09;成像工作已经证…

ctf.bugku - 本地管理员

题目来源&#xff1a;本地管理员 - Bugku CTF 访问页面 页面的最后返回一个字符串&#xff1b; 结尾 应该是base64 编码&#xff1b; 解码得到 test123 同时&#xff0c;提示信息还有 IP禁止访问&#xff0c;本地管理员登陆&#xff1b; 所以&#xff0c;请求头添加&#x…

【AI知识点】残差网络(ResNet,Residual Networks)

残差网络&#xff08;ResNet&#xff0c;Residual Networks&#xff09; 是由微软研究院的何凯明等人在 2015 年提出的一种深度神经网络架构&#xff0c;在深度学习领域取得了巨大的成功。它通过引入残差连接&#xff08;Residual Connection&#xff09; 解决了深层神经网络中…

基于图像的3D动物重建与生成

一、背景与目标 3D-Fauna 是一款用于基于图像和视频进行四足动物3D重建与生成的开源方案。自然界展示了复杂的相似性与多样性,该方法通过学习来自网上图片的四足动物的3D形态,能够从单张图片生成可动画化的带有纹理的3D网格模型。其最终目标是通过大量扩展现有的解决方案,实…

【网络篇】计算机网络——运输层详述(笔记)

目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解&#xff08;UDP&#xff09; 3. 面向连接的多路复用与多路分解&#xff08;TCP&#xff09; 4. Web 服务器与TCP 三、UDP&#x…

Django学习笔记十三:优秀案例学习

Django CMS 是一个基于 Django 框架的开源内容管理系统&#xff0c;它允许开发者轻松地创建和管理网站内容。Django CMS 提供了一个易于使用的界面来实现动态网站的快速开发&#xff0c;并且具有丰富的内容管理功能和多种插件扩展。以下是 Django CMS 的一些核心特性和如何开始…

力扣之1336.每次访问的交易次数

题目&#xff1a; sql建表语句&#xff1a; Create table If Not Exists Visits (user_id int, visit_date date); Create table If Not Exists Transactions (user_id int, transaction_date date, amount int); Truncate table Visits; insert into Visits (user_id,…

Unity3d使用JsonUtility.FromJson读取json文件

使用JsonUtility.FromJson方法不需要额外引用第三方库。该方法只能读取json对象&#xff0c;而不能读取json数组。 假如我们有如下的json数组&#xff1a; [ {"id":1, "name":"first2021", "level":5, "score":100, "…

The 2024 ICPC Kunming Invitational Contest F. Collect the Coins(二分)

在知乎内查看 题目 思路来源 官方题解 题解 一旦某个速度v满足&#xff0c;那么大于速度v的都满足&#xff0c;所以可以被二分&#xff0c;但是二分的check不好想&#xff0c;卡住了 最后去看了题解&#xff0c;其实维护的是&#xff0c;一个机器人在目标点收集硬币时&…

UGUI(三大现成UI控件)

Rawimage 可以是任意类型的图&#xff0c;所以这里的泛型就更宽泛&#xff0c;不止sprite 相比Image唯二的不同 uvrect有点像平铺 Text suddenly come to a Free island. best fit开启后会有范围选择 Image image 组件是挂在RectTransform的ui下的&#xff0c;换句话说&…

windows C++-创建数据流代理(二)

完整的数据流演示 下图显示了 dataflow_agent 类的完整数据流网络&#xff1a; 由于 run 方法是在一个单独的线程上调用的&#xff0c;因此在完全连接网络之前&#xff0c;其他线程可以将消息发送到网络。 _source 数据成员是一个 unbounded_buffer 对象&#xff0c;用于缓冲…

整理/删除重复文件

文件分类 #!/bin/bash if [ "$#" -ne 1 ]; thenecho "use: $0 <download_url>"exit 1 fi TARGET_DIR"$1" mkdir -p "$TARGET_DIR/jpg" mkdir -p "$TARGET_DIR/mp4" for img in "$TARGET_DIR"/*.jpg; doif…

k8s 中的 PV 的动态供给

目录 1 存储类 Storageclass 介绍 1.1 StorageClass 说明 1.2 StorageClass 的属性 2 存储分配器 NFS Client Provisioner 2.1 官网存储分配器的部署介绍 2.2 实现动态创建 PV 模版清单文件的介绍 2.2.1 Storageclass 存储类的模版 2.2.2 创建 Provisioner 制备器的模版 2.2.3…

ctf.bugku - POST

题目来源 &#xff1a;POST - Bugku CTF 访问请求&#xff0c;返回如下信息&#xff1b; 从这里可以得到信息&#xff1b;想要得到flag &#xff0c;需要发送post请求&#xff0c;并且请求带有what参数&#xff0c;参数值为flag 构造消息体&#xff1b; burpsuite中&#x…

连续点击三次用户

有用户点击日志记录表 t2_click_log&#xff0c;包含user_id(用户ID),click_time(点击时间)&#xff0c;请查询出连续点击三次的用户数&#xff0c; 连续点击三次&#xff1a;指点击记录中同一用户连续点击&#xff0c;中间无其他用户点击&#xff1b; CREATE TABLE t2_click…

仿小米的Disucz模板

整套模板是忽悠兄原创设计开发&#xff0c;这是一款简约大气的模板&#xff0c;保留Discuz预留功能&#xff0c; 必须一键式配置完成&#xff0c;使用插件配置到位&#xff0c;专业的网站肯定不使用DIY啦&#xff0c;二次开发了大部分功能&#xff0c; 更强大&#xff0c;别人…

微信小程序开发-配置文件详解

文章目录 一&#xff0c;小程序创建的配置文件介绍二&#xff0c;配置文件-全局配置-pages 配置作用&#xff1a;注意事项&#xff1a;示例&#xff1a; 三&#xff0c;配置文件-全局配置-window 配置示例&#xff1a; 四&#xff0c;配置文件-全局配置-tabbar 配置核心作用&am…

C++笔记之原子操作

C++笔记之原子操作 code review! 文章目录 C++笔记之原子操作1.初始化2.赋值3.取值4.赋给另一个原子类型5.`exchange`6.`compare_exchange_weak` 和 `compare_exchange_strong`使用场景7.注意事项在 C++ 中,原子类型提供了对共享变量的无锁操作,确保多线程环境下的安全。以下…