【贪心算法】专题练习一

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(3)

在这里插入图片描述


前言
1.什么是贪心算法?——贪婪+鼠目寸光

贪心策略:解决问题的策略,局部最优->全局最优
(1)即把解决问题的过程分为若干步
(2)解决每一步的时候吗,都选择当前看起来“最优的”解法
(3)希望得到全局最优解

2.贪心算法的特点
(1) 贪心策略的提出是没有标准以及模板的
(2) 可能每一道题的贪心策略都是不同的
(3)贪心策略的正确性:可能会出错;正确的贪心策略,我们是需要“证明的”

3.证明贪心策略的方法:数学中见过的所有证明方法

4.学习贪心的方向
(1):遇到不会的贪心题,很正常,把心态放平
(2):把策略当成经验吸收
(3):能证明则证明贪心策略的正确性


目录

  • 👉🏻柠檬水找零
    • 证明
  • 👉🏻将数组和减半的最少操作次数
    • 证明
    • priority_queue
      • 注意事项

👉🏻柠檬水找零

原题链接:柠檬水找零

mycode:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five = 0,ten = 0,twenty = 0;for(auto e:bills){if(e==5){five++;}else if(e==10){ten++;if(--five<0)return false;}else if(e==20){twenty++;//10+5 && 5+5+5 都不可以才找零失败int tmp1 = ten,tmp2 = five,tmp3 = five;if(--tmp1>=0&&--tmp2>=0){--ten;--five;}else if((tmp3-=3)>=0){five-=3;}elsereturn false;}}return true;}
};

证明

交换论证法
在这里插入图片描述

👉🏻将数组和减半的最少操作次数

原题链接:将数组和减半的最少操作次数

mycode:

class Solution {
public:int halveArray(vector<int>& nums) {priority_queue<double> heap;//默认大堆double sum = 0.0;for(auto e:nums){heap.push(e);sum+=e;}sum/=2.0;int count = 0;while(sum>0){double t = heap.top()/2.0;heap.pop();sum-=t;count++;heap.push(t);}return count;}
};

在这里插入图片描述

证明

在这里插入图片描述

priority_queue

当涉及到按照特定顺序处理元素时,C++ 的 std::priority_queue 是一个非常有用的容器适配器。它是一个基于堆的数据结构,用于实现优先级队列。在优先级队列中,元素按照其优先级被处理,具有较高优先级的元素先被处理。

以下是 std::priority_queue 的基本特征和用法:

包含头文件

#include <queue>

创建优先级队列

std::priority_queue<int> pq;  // 创建一个默认的最大堆

插入元素

pq.push(10);
pq.push(5);
pq.push(20);

访问顶部元素

int topElement = pq.top();  // 获取最高优先级的元素,但不删除

删除顶部元素

pq.pop();  // 删除最高优先级的元素

自定义比较函数
如果你想要自定义元素的比较方式,可以通过提供自定义比较函数来实现。以下是一个示例,创建一个最小堆:

#include <functional>std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;

或者,你也可以自定义比较函数

struct Compare {bool operator()(int a, int b) {// 自定义比较逻辑,返回 true 表示 a 的优先级高于 breturn a > b;}
};std::priority_queue<int, std::vector<int>, Compare> customQueue;

注意事项

  • 默认情况下,std::priority_queue 是一个最大堆,但你可以通过提供第三个参数(比较函数)来改变其行为。
  • std::priority_queue 不提供迭代器访问元素的方式,因为堆不是线性结构。
  • 在使用自定义比较函数时,确保比较函数是严格弱序(strict weak ordering),以确保正确的行为。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stat模块--python

在Python中,stat模块提供了一些用于解释os.stat(), os.lstat()和os.fstat()返回的结果的函数和常量。这些函数可以获取文件或文件系统节点的信息。 以下是一些stat模块中的函数和常量: stat.S_ISDIR(mode):如果mode是目录,则返回True。 stat.S_ISREG(mode):如果mode是普通…

在pyqt5界面中直接设置图标icon,不需要python程序代码!!一步搞定!!

小白轻松玩转pyqt5 1. 第一步&#xff1a;点击mainwindow,然后在windowicon中上传图片即可2. 设置成功总结&#xff08;对于小白入门pyqt5的一些忠告&#xff09; 1. 第一步&#xff1a;点击mainwindow,然后在windowicon中上传图片即可 2. 设置成功 总结&#xff08;对于小白入…

【Java 进阶篇】Jedis 操作 List:Redis中的列表类型

Redis中的列表&#xff08;List&#xff09;是一种有序的、可重复的数据类型&#xff0c;支持在列表的两端进行元素的插入和删除操作。Jedis作为Java开发者与Redis交互的工具&#xff0c;提供了丰富的API来操作List类型。本文将深入介绍Jedis如何操作Redis中的List类型数据&…

linux java环境安装

linux java1.8环境安装 下载 官方下载页面&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/ 选择[jdk-8u391-linux-x64.tar.gz]下载&#xff0c;解压到/usr/local下。 # 建立软连接&#xff0c;以后如果更换版本&#xff0c;只需要解压&#xff0c;并更…

嵌入式-stm32-用PWM点亮LED实现呼吸灯

一&#xff1a;知识前置 1.1、LED灯怎么才能亮&#xff1f; 答&#xff1a;LED需要低电平才能亮&#xff0c;高电平是灯灭。 1.2、LED灯为什么可以越来越亮&#xff0c;越来越暗&#xff1f; 答&#xff1a;这是用到不同占空比来实现的&#xff0c;控制LED实现呼吸灯&…

陈可之油画|《远古河谷》,古老的三峡

《远古河谷》 尺寸&#xff1a;90x66cm 陈可之2002年绘 《远古河谷》是陈可之先生“白垩纪组画七千万年三峡原生映象”系列作品之一&#xff0c;通过细腻的笔触所呈现的神秘&#xff0c;去体会自然的历史、生命的历史以及人文的历史&#xff01; 三峡&#xff0c;沉淀了7000多…

AI赋能金融创新:ChatGPT引领量化交易新时代

文章目录 一、引言二、ChatGPT与量化交易的融合三、实践应用&#xff1a;ChatGPT在量化交易中的成功案例四、挑战与前景五、结论《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅膀》&#x1f4da;→ [当当](http://product.dangdang.com/29658180.html) | [京东…

web前端 JQuery下拉菜单的案例

浏览器运行结果&#xff1a; JQuery下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/17LXZigLQ8yau0toTGj4P_Q?pwd4332 提取码&#xff1a;4332 代码&#xff1a; <!doctype html> <html> <head> <meta charset"UTF-8"><…

南大通用使用jdbc插入time时间类型为00:00:00的问题解析

问题场景&#xff1a; 数据库数据类型&#xff1a; datetime HOUR TO SECOND -- 代表时分秒类型 hh:mm:ss&#xff0c;例如&#xff1a;10:58:13 在使用 PreparedStatement 进行set数据的时候执行结果为00:00:00 问题原因&#xff1a; 在setObject的时候&#xff0c;set的…

WPS复选框里打对号,显示小太阳或粗黑圆圈的问题解决方法

问题描述 WPS是时下最流行的字处理软件之一&#xff0c;是目前唯一可以和微软office办公套件相抗衡的国产软件。然而&#xff0c;在使用WPS的过程中也会出现一些莫名其妙的错误&#xff0c;如利用WPS打开docx文件时&#xff0c;如果文件包含复选框&#xff0c;经常会出…

自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏

首先说到脱敏问题,我相信在座的很多人都需要处理这样的场景,比如前端页面显示的身份证号、地址等敏感信息都需要脱敏处理,而hutool就有这样的一个工具来辅助我们完成对某些字段属性信息的脱敏,hutool没有现成的实现方式,只是借助这个工具帮助我们来具体实现 前言 我们在…

【Vue2+3入门到实战】(4)Vue基础之指令修饰符 、v-bind对样式增强的操作、v-model应用于其他表单元素 详细示例

目录 一、今日学习目标1.指令补充 二、指令修饰符1.什么是指令修饰符&#xff1f;2.按键修饰符3.v-model修饰符4.事件修饰符 三、v-bind对样式控制的增强-操作class1.语法&#xff1a;2.对象语法3.数组语法4.代码练习 四、京东秒杀-tab栏切换导航高亮1.需求&#xff1a;2.准备代…

RHCE9学习指南 第7章 服务管理

刚装好Windows系统时&#xff0c;需要进行一些优化&#xff0c;如下图所示。 右键单击所得菜单&#xff0c;可以看到一些按钮包括重启、停止、启动该服务。这些管理的是这个服务的当前状态。 双击服务名&#xff0c;在启动类型中设置的是系统启动时&#xff0c;这个服务要不要…

git之UGit可视化工具使用

一、下载安装UGit 链接&#xff1a;https://pan.baidu.com/s/1KGJvWkFL91neI6vAxjGAag?pwdsyq1 提取码&#xff1a;syq1 二 、使用SSH进行远程仓库连接 1.生成SSH密钥 由于我们的本地 git仓库和 gitee仓库之间的传输是通过SSH加密的&#xff0c;所以我们需要配置SSH公钥。才…

Python深度学习031:用纯python实现堆叠自编码器网络(不使用框架)

文章目录 1 堆叠自编码器介绍基本概念堆叠自编码器的特点应用领域2 自编码器和BP神经网络的区别1. 目标和用途2. 结构和组件3. 训练方式4. 应用场景3 纯python实现堆叠自编码器实现步骤示例代码4 示例代码详尽的解释导入库初始化参数前向传播计算损失

​ iOS技术博客:App备案指南

&#x1f4dd; 摘要 本文介绍了移动应用程序&#xff08;App&#xff09;备案的重要性和流程。备案是规范App开发和运营的必要手段&#xff0c;有助于保护用户权益、维护网络安全和社会秩序。为了帮助开发者更好地了解备案流程&#xff0c;本文提供了一份最新、最全、最详的备…

蓝牙物联网通信网络设计方案

随着当前经济的快速发展&#xff0c;社会运行节奏加快&#xff0c;人们更倾向于选择高效的出行方式&#xff0c;而飞机就是其中之一。近年来&#xff0c;全国各地机场的吞吐量不断增长&#xff0c;导致航站楼面积过大&#xff0c;而 GPS全球定位系统在室内感测不到卫星信号无法…

RPC(6):RMI实现RPC

1RMI简介 RMI(Remote Method Invocation) 远程方法调用。 RMI是从JDK1.2推出的功能&#xff0c;它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用&#xff08;JVM&#xff09;中的内容。 RMI 是Java语言的远程调用&#xff0c;无法实现跨语言。…

基于java+控件台+mysql的学生信息管理系统(含演示视频)

基于java控件台mysql的学生信息管理系统_含演示视频 一、系统介绍二、功能展示1.项目内容2.项目骨架3.数据库4.登录系统5.新增学生6.查询学生7.修改学生8.删除学生9.退出系统 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java SE项目&#xff08;控制…

sqlite_orm学习笔记

git库 sqlite 从官网下载 https://www.sqlite.org/download.html Source Code 里面下载 解压以后有四个文件&#xff1a; Sqlite3基本需求使用sqlite3.h/.c &#xff0c;其中shell.c可以编译出可以执行文件&#xff0c;另外一个头文件是用于扩展&#xff0c;外部接口导入。运…