C++贪心

news2024/11/26 2:24:31

前言

C++算法与数据结构
打开打包代码的方法兼述单元测试

简介

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。贪心算法的正确性必须证明。常见的证明方法有五种:一,反证法。二,数学归纳法。三,决策包容性。 四,扩展决策范围。五,临项交换。
在这里插入图片描述

决策包容性

如果存在最优解,增加某种条件限制后,仍然有最优解。故只需要考虑此种条件下的最优解。

【C++二分查找 贪心 决策包容性】826. 安排工作以达到最大收益1708
【C++栈 贪心 决策包容性】3170. 删除星号以后字典序最小的字符串1772
【C++二分查找 贪心 决策包容性】2576. 求出最多标记下标1843
【C++二分查找 贪心 决策包容性】1488. 避免洪水泛滥1973
【贪心 决策包容性】2561. 重排水果2221
【贪心 决策包容性 】757. 设置交集大小至少为2348

临项交换(微扰)

证明在任意局面下,任何对局部最优策略的微小改变都会造成整体结果变差。经常用于以“排序”为贪心策略的证明。

【C++贪心 临项交换】3219. 切蛋糕的最小总开销 II1789
【 贪心 临项交换 多指针】2931. 购买物品的最大开销1822
【C++贪心 临项交换 】1665. 完成所有任务的最少初始能量1900
【反悔堆 优先队列 临项交换 决策包容性】630. 课程表 II

扩展决策范围(放缩法)

在思考贪心算法时,有时候不容易直接证明局部最优决策的正确性,此时可以往后多扩展一步,进而对当前的决策进行验证。扩展决策范围,即往后多看一步。

数学归纳法

【C++贪心 数学归纳法】1054. 距离相等的条形码|1701

常见场景

中位数贪心:

pos[0…n-1]升序,记录了所有房间的位置,将邮筒放在何处,邮筒到各户的距离最短。
结论:如果n为偶数,则pos[n/2-1]到pos[n/2]之间;如果n为奇数,pos[n/2]。
下面用分组法和扩展决策范围来证明。
先假定n是偶数,分组法:pos[i]和pos[n-1-i]一组,任意一组最小距离为pos[n-1-i]-pos[i],放在两者的中间,可以取最小值。
当n =2时,放在中间可以取最小值。
当 n=4,放置pos[1]和pos[2]中间可以取最小值。
⋯ \cdots 放置到pos[n/2-1]和pos[n/2]可以取最小值。
当n为奇数时:邮箱放到pos[i],各组取最小值,pos[i]为0。

【动态规划】【中位数贪心】【C++算法】1478. 安排邮筒2190
【贪心算法】【中位贪心】2968.执行操作使频率分数最大2444
【动态规划】【前缀和】【中位数贪心】2463. 最小移动总距离2453
【对顶队列】【中位数贪心】【前缀和】3086. 拾起 K 个 1 需要的最少行动次数2672

临项不同

n个字符,能否让相邻的字符不同。
性质一:出现次数最多的字符出现次数<= n/2。则限制队首不为指定字符也可以让相邻不相等。
性质二:n是奇数。出现最多的条形码出现n/2+1次。如果队首可以为此条形码,则可以让相邻不相等。
下面用数学归纳法来证明。
n为1成立:{a}
n为2成立:{a,b},{b,a}
n为3成立:{a,b,a} {a,b,c}{a,c,b}
从小到大证明n = 4 To ∞ \infty
n为偶数:
如果存在两个众数为n/2,将任意众数放到队首,余下的符合性质二。
否则,将任意众数放到队首,余下的符合性质一。
n为奇数:
如果众数为n/2+1,则只有一个众数。否则两个众数的数量为n+1,与n个数矛盾。
将众数放到队首,余下的符合性质一。
从上面的证明过程得知:如果有解,则将众数放到最前面,一定存在解。

【C++贪心 数学归纳法】1054. 距离相等的条形码1701
【C++二分查找 贪心】2856. 删除数对后的最小数组长度1749
【C++贪心】1953. 你可以工作的最大周数1803

反悔贪心

发现无法贪心时,再更改。如:完成第i个任务需要task[i]块砖头或一个梯子。问最多能完成多少个任务,必须依次次完成任务。两种反悔贪心法:一,优先用砖头,砖头不够,就用梯子完成需要砖头最多的任务。二,优先用梯子,梯子不够。将需要砖头最少的梯子换成砖头。

【反悔贪心 反悔堆】1642. 可以到达的最远建筑1962
【大根堆】【反悔堆】【反悔贪心】【C++算法】871 最低加油次数2074
【反悔堆 反悔贪心】2813. 子序列最大优雅度2582
【反悔贪心】【优先队列】3049. 标记所有下标的最早秒数 II3111

未分类

【排序 贪心】3107. 使数组中位数等于 K 的最少操作数1604
【C++贪心】2522. 将字符串分割成值不超过 K 的子字符串1604
【C++贪心】2567. 修改两个元素的最小分数1608
【C++贪心】2086. 喂食仓鼠的最小食物桶数1622
【C++贪心 位运算】2571. 将整数减少到零需要的最少操作数1649
【C++二分查找 贪心】792. 匹配子序列的单词数1695
【C++贪心】2498. 青蛙过河 II1759
【C++ 贪心 滑动窗口 前后缀分解】948. 令牌放置1762
【C++贪心】1262. 可被三整除的最大和1762
【C++贪心】2712. 使所有字符相等的最小成本1791
【C++贪心】1953. 你可以工作的最大周数1803
【C++ 贪心 双指针】2576. 求出最多标记下标1843
【C++贪心】1775. 通过最少操作次数使数组的和相等1850
【C++ 贪心】1616. 分割两个字符串得到回文串1868
【C++贪心 分治】1717. 删除子字符串的最大得分1867
【贪心 堆 】3081. 替换字符串中的问号使分数最小1904
【C++前缀和 位运算 贪心 】2680. 最大或值1912
【C++贪心 DFS】2673. 使二叉树所有路径值相等的最小代价1917
【C++二分查找 贪心】1552. 两球之间的磁力1919
【C++贪心 单调栈】1727. 重新排列后的最大子矩阵1926
【C++前缀和 动态规划 贪心】813. 最大平均值和的分组1936
【位运算 贪心】2835. 使子序列的和等于目标的最少操作次数2207
【C++前缀和 数论 贪心】2245. 转角路径的乘积中最多能有几个尾随零2036
【C++二分查找 贪心】1648. 销售价值减少的颜色球2050
【字符串】【贪心】【 树状数组】2193. 得到回文串的最少操作次数2090
【贪心】【二分查找】【动态规划】1739放置盒子2198
【解析几何】 【多源路径】 【贪心】1520 最多的不重叠子字符串2362
【贪心】【回溯】【字符串】2014. 重复 K 次的最长子序列2558
【贪心】【分类讨论】2499. 让数组不相等的最小总代价2633
【贪心算法】2071:你可以安排的最多任务数目2648
前缀和+单调双队列+贪心:2945:找到最大非递减数组的长度2943
【贪心]【字符串】【分类讨论】420 强密码检验器无难度分
【贪心 堆 优先队列】502. IPO无难度分

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

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

相关文章

【设计模式系列】抽象工厂模式

一、什么是抽象工厂模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一个接口&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们具体的类。这种模式允许客户端使用抽象的接口来创建一组…

AUTOSAR_EXP_ARAComAPI的5章笔记(17)

☞返回总目录 相关总结&#xff1a;AutoSar AP CM通信组总结 5.7 通信组 5.7.1 目标 通信组&#xff08;Communication Group&#xff0c;CG&#xff09;是由 AUTOSAR 定义的复合服务模板。它提供了一个通信框架&#xff0c;允许在 AUTOSAR 应用程序之间以对等方式和广播模…

第6章 元素应用CSS作业

1.使用CSS对页面网页元素加以修饰&#xff0c;制作“旅游攻略”网站。 浏览效果如下&#xff1a; HTML代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>旅游攻略</title><link type"t…

[JAVAEE] 线程安全问题

目录 一. 什么是线程安全 二. 线程安全问题产生的原因 三. 线程安全问题的解决 3.1 解决修改操作不是原子性的问题 > 加锁 a. 什么是锁 b. 没有加锁时 c. 加锁时 d. 死锁 e. 避免死锁 3.2 解决内存可见性的问题 > volatile关键字 (易变的, 善变的) a. 不加…

【Linux】多线程安全之道:互斥、加锁技术与底层原理

目录 1.线程的互斥 1.1.进程线程间的互斥相关背景概念 1.2.互斥量mutex的基本概念 所以多线程之间为什么要有互斥&#xff1f; 为什么抢票会抢到负数&#xff0c;无法获得正确结果&#xff1f; 为什么--操作不是原子性的呢&#xff1f; 解决方式&#xff1a; 2.三种加锁…

git add操作,文件数量太多卡咋办呢,

git add介绍 Git的add命令是用于将文件或目录添加到暂存区&#xff08;也就是索引库&#xff09;&#xff0c;以便在后续的提交&#xff08;commit&#xff09;操作中一并上传到版本库的。具体来说&#xff0c;git add命令有以下几种常见用法&#xff1a; 添加单个文件&#…

4、.Net 快速开发框架:DncZeus - 开源项目研究文章

DncZeus 是一个基于 ASP.NET Core 和 Vue.js 的前后端分离的通用后台管理系统框架&#xff0c;其愿景是成为一个易于使用且功能丰富的 .NET Core 通用后台权限管理模板系统基础框架。项目名称 "DncZeus" 由 "Dnc"(.NET Core 的缩写)和 "Zeus"(古…

CLion和Qt 联合开发环境配置教程(Windows和Linux版)

需要安装的工具CLion 和Qt CLion下载链接 :https://www.jetbrains.com.cn/clion/ 这个软件属于直接默认安装就行&#xff0c;很简单&#xff0c;不多做介绍了 Qt:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ window 直接点exe Linux 先c…

el-table动态新增/删除表单行及校验规则

方式一&#xff1a; <template><el-form ref"ruleFormRef" :model"ruleForm" :rules"rules" label-width"120px" class"model-ruleForm":size"formSize" status-icon label-position"top">…

堆的使用实例

小伙伴们大家好&#xff0c;今天为大家带来一道算法题&#xff1a; 分析题意我们可知&#xff1a;数组最小元素一定位于0~k位置&#xff0c;如果我们首先将0~k位置构成最小堆&#xff0c;那么堆顶一定就是数组最小值。将堆顶拿出&#xff0c;将数组k1位置放入&#xff0c;那么数…

无人机+视频推流直播EasyCVR视频汇聚/EasyDSS平台在森林防护巡检中的解决方案

随着科技的飞速发展&#xff0c;无人机技术在各个领域的应用日益广泛&#xff0c;特别是在森林防护与巡检方面&#xff0c;无人机以其独特的优势&#xff0c;为传统林业管理带来了革命性的变化。本文将探讨无人机在森林防护巡检中的解决方案&#xff0c;分析其工作原理、优势及…

MYSQL 拼接函数

目录 1、CONCAT 2、CONCAT_WS 1、CONCAT 解释&#xff1a;用于拼接两个或多个字符串成一个字符串。如果任何一个参数为 NULL&#xff0c;则 CONCAT 函数的结果也会是 NULL。 语法格式&#xff1a;SELECT concat(column_name1,column_name2,...) FROM table_name 中文注释&…

【verilog刷题】时钟切换电路

时钟切换电路 1.基本概念-相关时钟源和无关时钟源2.基本的时钟切换电路&#xff08;组合逻辑&#xff09;2.相关时钟源无毛刺时钟切换电路3.非相关时钟源无毛刺时钟切换电路 1.基本概念-相关时钟源和无关时钟源 相关时钟源&#xff1a;时钟信号源之间存在某种同步或关联的关系…

[含文档+PPT+源码等]精品基于Nodejs实现的医院问诊系统的设计与实现

基于Node.js实现的医院问诊系统的设计与实现背景主要源于以下几个方面&#xff1a; 一、医疗行业变革的需求 随着互联网的飞速发展&#xff0c;特别是移动互联网技术的广泛应用&#xff0c;传统医疗行业正经历着前所未有的变革。医疗资源分布不均、患者就医难等问题日益凸显&…

数据结构单向链表的插入和删除(一)

链表 一、链表结构&#xff1a; &#xff08;物理存储结构上不连续&#xff0c;逻辑上连续&#xff1b;大小不固定&#xff09;二、单链表&#xff1a;三、单项链表的代码实现&#xff1a;四、开发可用的链表&#xff1a;四、单链表的效率分析&#xff1a; 一、链表结构&#x…

爬虫结合项目实战

由于本人是大数据专业&#xff0c;所以准备的是使用pycharm工具进行爬虫爬取数据&#xff0c;然后实现一个可视化大屏 参考项目&#xff1a; 1.医院大数据可视化最后展示 2. 大数据分析可视化系统展示 代码包&#xff1a;

如何防止SpringBoot中的jar反编译?解决相关报错及踩到的坑

目录 1. 面对的场景 2. 方案 2.1 使用代码混淆 2.2 JAR包加密 3. 项目操作 4. 启动方式 5. 踩到的各种坑 5.1 java -jar xxx-0.0.1-SNAPSHOT.jar 没有主清单属性 5.2 Caused by: java.lang.IllegalArgumentException: Unrecognized option: -pwdfxw-jar 1. 面对的场景…

sql-labs靶场第十七关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

STM32CubeMX【串口收发USART】

第一步&#xff0c;配置cubemx 配置好点右上角生成 第二步&#xff0c;串口方式 阻塞式发送 英文、中文正常、浮点有口 /* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();//配置完自动生成的 发送到串口助手上 while (1){/* USER CODE…

【计算机网络 - 基础问题】每日 3 题(五十)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…