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

文章目录

  • ⭐例题
    • 🚩题意与思路
  • ⭐返回贪心
    • 🚩原理(反悔池)
    • 🚩落实到题
    • 🚩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.mfbz.cn/a/888121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁

不過受到 Recall 事件的影響&#xff0c;更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面&#xff0c;並增加了一些新的功能&#xff0c;像是 Copilot Voice 能讓你與 AI 助手進行對話式…

IDEA:增加类注释模板和方法注释模板

文章目录 概要配置类注释模板配置方法模版 概要 配置类注释和方法注释 配置类注释模板 点击setting->Editor->File and Code Templates&#xff0c;然后找到Class&#xff0c;如下图&#xff1a; 注意勾掉Reformat according to style&#xff0c;否则会格式化。 注…

51单片机的水位检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块水位传感器继电器LED、按键和蜂鸣器等模块构成。适用于水位监测、水位控制、水位检测相似项目。 可实现功能: 1、LCD1602实时显示水位高度 2、水位传感器采集水位高度 3、按键可设置水位的下限 4、按键可手动加…

指针(7)

目录 1. sizeof和strlen的对⽐ 1.1 sizeof 1.2 strlen sizeof 和 strlen 总结&#xff1a; 2. 数组和指针 2.1 ⼀维数组 2.2 字符数组 1. sizeof和strlen的对⽐ 1.1 sizeof 计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof不在乎你里面放的什么。sizieof是操作符…

设计模式~~~

简单工厂模式(静态工厂模式) 工厂方法模式 抽象工厂角色 具体工厂角色

王者农药更新版

GPIO简介 STM32开发板有5组GPIO引脚&#xff0c;分别是GPIOA,GPIOB,GPIOC,GPIOD,GPIOE&#xff0c;每组GPIO有16个引脚。 每个引脚都有4个位来配置其端口&#xff0c;可以配置出不同的输入\输出模式。 1、普通推挽输出&#xff08;GPIO_Mode_Out_PP&#xff09;: 使用场合&…

在不支持WSL2的Windows环境下安装Redis并添加环境变量的方法

如果系统版本支持 WSL 2 可跳过本教程。使用官网提供的教程即可 官网教程 查看是否支持 WSL 2 如果不支持或者觉得麻烦可以按照下面的方式安装 下载 点击打开下载地址 下载 zip 文件即可 安装 将下载的 zip 文件解压到自己想要解压的地方即可。&#xff08;注意&#x…

sqli-labs less-17密码重置报错注入

密码重置报错植入 来到首页面我们看到页面提示【password reset】&#xff0c;说明这是更改密码的注入&#xff0c;也就是说我们知道一个账户名&#xff0c;修改他的密码&#xff0c;所以我们可以在passwd处进行注入。 闭合方式 添加单引号 有报错 可以知道闭合方式为单引号…

Leetcode—76. 最小覆盖子串【困难】

2024每日刷题&#xff08;167&#xff09; Leetcode—76. 最小覆盖子串 C实现代码 class Solution { public:string minWindow(string s, string t) {int bestL -1;int l 0, r 0;vector<int> cnt(128);for(const char c: t) {cnt[c];}int require t.length();int m…

OJ在线评测系统 微服务 用分布式消息队列 RabbitMQ 解耦判题服务和题目服务 手搓交换机和队列 实现项目异步化

消息队列解耦 项目异步化 分布式消息队列 分布式消息队列是一种用于异步通信的系统&#xff0c;它允许不同的应用程序或服务之间传递消息。消息队列的核心理念是将消息存储在一个队列中&#xff0c;发送方可以将消息发送到队列&#xff0c;而接收方则可以在适当的时候从队列中…

安卓如何实现双击触摸唤醒点亮屏幕功能-Android framework实战开发

背景 经常有学员朋友在群里问到一个目前市场上常见的功能&#xff1a; 手机待机时候双击屏幕可以唤醒点亮手机屏幕功能 如何实现这个功能&#xff0c;经常有同学在群里求助&#xff0c;今天就刚好来讨论一下这个待机时候双击触摸唤醒点亮屏幕的功能的实现方案。 功能核心方案设…

【微服务】服务注册与发现 - Eureka(day3)

CAP理论 P是分区容错性。简单来说&#xff0c;分区容错性表示分布式服务中一个节点挂掉了&#xff0c;并不影响其他节点对外提供服务。也就是一台服务器出错了&#xff0c;仍然可以对外进行响应&#xff0c;不会因为某一台服务器出错而导致所有的请求都无法响应。综上所述&…

dwceqos网络驱动性能优化

文章介绍 本文会分享一些在QNX系统下对io-pkt-v6-hc驱动模块cpu loading过高问题优化的经验&#xff0c;以及一些调优debug的方法。这些优化措施实施之后可以降低io-pkt-v6-hc在高负载的情况下的cpu loading。本文的调优是基于synopsys公司的dwceqos模块&#xff0c;理论上方法…

【Android 源码分析】Activity生命周期之onPause

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

【STM32 HAL库】MPU6050 DMP库移植 与 自检失败的处理

【STM32 HAL库】MPU6050 DMP库移植 与 自检失败的处理 本文参考移植步骤文件配置代码修改inv_mpu.cinv_mpu.hinv_mpu_dmp_motion_driver.c 使用 自检失败怎么处理ret -1改正DEBUG过程 ret -9改正DEBUG过程 本文参考 B站 CSDN 移植步骤 文件配置 新建一个 dmp 文件夹 并将…

【Linux】进程地址空间、环境变量:从理论到实践(三)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 &#x1f680; 前言一&#xff1a;&#x1f525; 环境变量 &#x1f95d; 基本概念&#x1f95d; 常见环境变量&#x1f95d; 查看环境变量方法 二&#xff1a;&#x1f525; 测试 &…

Nat. Commun.:飞秒激光书写受蚂蚁启发的可重构微型机器人集体

背景介绍生物在各种环境中的集体行为十分普遍&#xff0c;它们能够自发有序地完成单个个体难以完成的任务。目前&#xff0c;生物集体的形成主要分为两大类。第一类生物个体之间没有直接接触&#xff0c;如蜜蜂、鱼和鸟类&#xff0c;这导致这些集体不稳定&#xff0c;容易受到…

Linux网络编程 -- 网络基础

本文主要介绍网络的一些基础概念&#xff0c;不涉及具体的操作原理&#xff0c;旨在构建对网络的基础认识。 1、网络的早期发展历程 20世纪50年代 在这一时期&#xff0c;计算机主机非常昂贵&#xff0c;而通信线路和设备相对便宜。为了共享计算机主机资源和进行信息的综合处…

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

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

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令命令解释SHOW DATABASES&#xff1b;展示所有的数据库CREATE DATABASE 数据库名称; 创…