当前位置: 首页 > news >正文

数据结构刷题之贪心算法

贪心算法(Greedy Algorithm)

是一种在每个步骤中都选择当前最优解的算法设计策略。它通常用于解决优化问题,例如最小化成本或最大化收益。贪心算法的核心思想是:在每一步选择中,都做出局部最优的选择,希望最终能得到全局最优解。

贪心算法的特点

贪心选择性质:
一个问题的整体最优解可以通过一系列局部最优选择来构造。
每次选择只依赖于当前状态,而不考虑未来的影响。
最优子结构性质:
一个问题的最优解包含其子问题的最优解。
简单高效:
贪心算法通常比动态规划等方法更简单、更高效,但适用范围有限。

经典题目

1.找零问题
给定不同面额的硬币和一个总金额,要求使用最少数量的硬币凑出该金额。
分析一下这个问题:这种问题肯定是先使用大的去找,大的找不完采用晓得,典型的局部最优解–>整体最优解
思路先用大的找->再用小的找

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int minCoins(vector<int>& coins, int amount) {// 对硬币面额从大到小排序sort(coins.begin(), coins.end(), greater<int>());int count = 0; // 记录硬币数量for (int coin : coins) {if (amount == 0) break; // 如果金额为 0,结束循环count += amount / coin; // 使用当前面额的硬币尽可能多amount %= coin;         // 更新剩余金额}return amount == 0 ? count : -1; // 如果无法找零,返回 -1
}int main() {vector<int> coins = {1, 5, 10, 25}; // 硬币面额int amount;cout << "请输入总金额: ";cin >> amount;int result = minCoins(coins, amount);if (result != -1) {cout << "最少需要 " << result << " 枚硬币。" << endl;} else {cout << "无法找零。" << endl;}return 0;
}```
2. 活动选择问题
给定一组活动及其开始时间和结束时间,求最多能参加多少个不重叠的活动。
对于活动选择问题,贪心策略通常是优先选择结束时间最早的活动。原因如下:
如果一个活动的结束时间较早,那么它留下的时间窗口就更大,从而为后续活动提供了更多可能的选择。
这种策略确保每次选择都尽可能地为后续活动腾出空间,从而最大化可参加的活动数量。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;struct Activity {int start, end;
};// 按照活动结束时间排序
bool compare(Activity a, Activity b) {return a.end < b.end;
}int maxActivities(vector<Activity>& activities) {// 按结束时间排序sort(activities.begin(), activities.end(), compare);int count = 1; // 至少可以选择第一个活动int lastEnd = activities[0].end;for (int i = 1; i < activities.size(); ++i) {if (activities[i].start >= lastEnd) { // 如果当前活动与上一个活动不冲突count++;lastEnd = activities[i].end; // 更新最后一个活动的结束时间}}return count;
}int main() {vector<Activity> activities = {{1, 3}, {2, 5}, {4, 7}, {6, 9}};cout << "最多可以参加 " << maxActivities(activities) << " 个活动。" << endl;return 0;
}
  1. 分糖果问题
    有若干孩子和糖果,每个孩子有一个贪婪因子(表示至少需要多少糖果才能满足),每个糖果有一个大小。问最多能满足多少孩子?
    策略:
    优先满足需求最小的孩子:因为需求小的孩子更容易被满足,这样可以腾出更多较大的糖果来满足其他孩子。
    优先使用最小的糖果:因为较小的糖果可能无法满足需求大的孩子,但可以满足需求小的孩子。
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int findContentChildren(vector<int>& g, vector<int>& s) {// 对孩子的贪婪因子和糖果大小进行排序sort(g.begin(), g.end());sort(s.begin(), s.end());int child = 0, cookie = 0;while (child < g.size() && cookie < s.size()) {if (s[cookie] >= g[child]) { // 如果当前糖果可以满足孩子child++; // 满足的孩子数加 1}cookie++; // 移动到下一个糖果}return child; // 返回满足的孩子数
}int main() {vector<int> g = {1, 2, 3}; // 孩子的贪婪因子vector<int> s = {1, 1};    // 糖果的大小cout << "最多可以满足 " << findContentChildren(g, s) << " 个孩子。" << endl;return 0;
}
  1. 最优装载问题
    有一艘船,载重量为 W,有若干货物,每个货物有重量 w[i]。求最多能装多少货物。
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int maxLoad(vector<int>& weights, int W) {// 按货物重量从小到大排序sort(weights.begin(), weights.end());int count = 0; // 记录装入的货物数量for (int weight : weights) {if (W >= weight) { // 如果还能装下当前货物count++;W -= weight; // 更新剩余载重量} else {break;}}return count;
}int main() {vector<int> weights = {4, 8, 1, 5, 2}; // 货物重量int W;cout << "请输入船的最大载重量: ";cin >> W;cout << "最多可以装载 " << maxLoad(weights, W) << " 件货物。" << endl;return 0;
}

相关文章:

数据结构刷题之贪心算法

贪心算法&#xff08;Greedy Algorithm&#xff09; 是一种在每个步骤中都选择当前最优解的算法设计策略。它通常用于解决优化问题&#xff0c;例如最小化成本或最大化收益。贪心算法的核心思想是&#xff1a;在每一步选择中&#xff0c;都做出局部最优的选择&#xff0c;希望…...

每日一题(小白)暴力娱乐篇23

由题意得知给我们一串数字&#xff0c;我们每次交换两位&#xff0c;最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考&#xff0c;加入给你一串数字获得最少的交换次数&#xff0c;意味着你的交换后续基本不会变&#xff0c;比如说2 1 3 5 4 中1与2交换后不变&…...

回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测

回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测 目录 回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME…...

第1章 对大型语言模型的介绍

人类正处在一个关键转折点。自2012年起&#xff0c;基于深度神经网络的人工智能系统研发进入快速通道&#xff0c;将这一技术推向了新高度&#xff1a;至2019年底&#xff0c;首个能够撰写与人类文章真假难辨的软件系统问世&#xff0c;这个名为GPT-2&#xff08;生成型预训练变…...

PGA 简介

PGA&#xff08;Programmable Gain Amplifier&#xff0c;可编程增益放大器&#xff09;是一种可以通过外部控制信号改变增益大小的放大器&#xff0c;常用于需要灵活调节信号放大倍数的应用中&#xff0c;比如在模拟信号采集、数据转换&#xff08;如 ADC 之前&#xff09;、传…...

2025年CCF-C NCA:导航变量多目标粒子群算法NMOPSO,深度解析+性能实测

目录 1.摘要2.运动学模型和约束3.路径规划目标函数3.多目标粒子群算法4.结果展示5.参考文献6.代码获取 1.摘要 路径规划是无人机&#xff08;UAV&#xff09;任务执行的核心&#xff0c;因为它决定了无人机完成任务所需的飞行路径。为了解决这一问题&#xff0c;本文提出了一种…...

FFMpeg音视频解码实战

音频解码 一、初始化阶段 avformat_open_input 打开输入媒体文件。avformat_find_stream_info 读取媒体流信息&#xff0c;查找音频流。avcodec_find_decoder 查找对应的解码器&#xff08;如 AAC、MP3 解码器&#xff09;。avcodec_alloc_context3 分配解码器上下文。avcodec…...

day25学习Pandas库

文章目录 三、Pandas库4.函数计算7.合并8.随机抽样9.空值处理9.1检测空值9.2填充空值9.3删除空值行/列 5.读取CSV文件5.1 to_csv()5.2 read_csv() 6.绘图 三、Pandas库 4.函数计算 7.合并 merge 函数用于将两个 DataFrame 对象根据一个或多个键进行合并 函数&#xff1a; …...

去除Mysql表中的空格、回车、换行符和特殊字符

系列文章目录 文章目录 系列文章目录前言一、示例1.sql层面2.java层面 前言 一、示例 1.sql层面 参考 ## 例子1 ## CHAR(10) 表示换行符 ## CHAR(13) 表示回车UPDATE 表名 SET 列名 REPLACE(REPLACE(列名, CHAR(10), ), CHAR(13), )## 例子2 ## 删除字段中的空格、换行符、…...

以普通用户身份启动pure-ftpd服务端

Pureftp的优点包括 : 高性能&#xff0c;适用于大容量数据传输。安全性强&#xff0c;通过SSL/TLS加密和身份验证机制保证文件传输安全。易用性高&#xff0c;具有直观的用户界面。灵活性强&#xff0c;支持多种文件存储方式。没有漏洞&#xff0c;便于维护 基于Centos 9的pu…...

国内下载不了镜像,可以用国外机器下载完成,打成tar文件,在国内机器上重新加载

可以在 已经拉取过镜像的机器上打包&#xff08;导出&#xff09;镜像文件&#xff0c;然后 拷贝到另一台机器上导入使用。这是离线部署 Docker 镜像的常用方法&#xff0c;非常适合网络受限的环境。 &#x1f6e0;️ 步骤如下&#xff1a; ✅ 1. 在已有镜像的机器上打包镜像 …...

【Java】Java 中不同类型的类详解

目录 Java 中不同类型的类详解一、基础类类型1. 普通类&#xff08;Concrete Class&#xff09;2. 抽象类&#xff08;Abstract Class&#xff09;3. 接口&#xff08;Interface&#xff09;4. 枚举类&#xff08;Enum Class&#xff09; 二、嵌套类与特殊类5. 内部类&#xff…...

Cadence学习笔记之---热风焊盘制作

目录 01 | 前 言 02 | 环境描述 03 | 热风焊盘 04 | 规则热风焊盘制作 05 | 不规则热风焊盘制作 06 | 总 结 01 | 前 言 在上一篇Cadence小记中讲述了如何制作贴片(SMD)焊盘、通孔焊盘、以及过孔&#xff1b;本篇关于Cadence的小记主要讲如何制作热风焊盘。 上篇小记&a…...

518. Coin Change II

这是完全背包问题。 由于求的是组合数&#xff0c;所以外层循环只能是对硬币遍历&#xff0c;内层循环只能是对总金额的遍历。 另外&#xff0c;虽然题目数据保证结果符合 32 位带符号整数。但是第28个测试用例&#xff0c;dp[j]dp[j-conis[i]]中间结果会整数溢出&#xff0c…...

GPIO子系统与Pinctrl子系统的交互

我们前面呢&#xff0c;已经讲过GPIO子系统的数据结构以及他的设备树信息是怎么转换成我们的C代码存储在结构体里面了&#xff0c;我们知道&#xff0c;如果想去使用一个GPIO&#xff0c;避免不了得把这个引脚复用成GPIO功能&#xff0c;那么就避不开Pinctrl子系统&#xff0c;…...

DeepSeek实用操作及行业应用系列2

DeepSeek的本地化部署与AI通识教育之未来 DeepSeek之火&#xff0c;可以燎原 面向审计行业DeepSeek大模型操作指南v1.0 DeepSeek提示词设计、幻觉避免与应用&#xff08;大数据百家讲坛&#xff09; DeepSeek 搞钱教程&#xff08;0基础入门&#xff09; DeepSeek基础知识…...

面向数据库场景的大模型交互微调数据集

关键要点 研究表明&#xff0c;面向数据库场景的大模型交互微调数据集通常包括数据库模式、自然语言查询和对应的SQL查询。证据倾向于认为&#xff0c;数据集应以JSON格式组织&#xff0c;覆盖多种查询类型&#xff0c;并确保高质量和多样性。对于自定义数据库&#xff0c;建议…...

解锁ChatGPT-4o文生图潜力:精选提示词收集整理更新中

示例一&#xff1a;按元素和描述要求生成图片 示例二&#xff1a;“吉卜力”风格 示例三&#xff1a;3D Q版风格 示例四&#xff1a;生成指定布局和主题图片 具体的提示词参考&#xff0c;陆续更新中&#xff1a;https://blog.luler.top/d/25...

WHAT - React 进一步学习推荐

书籍 adevnadia 的《Advanced React》TejasKumar_ 的《Fluent React》addyosmani 和 djirdehh 的《Building Large Scale Web Apps》 面试准备 reactjs-interview-questions 文章&#xff1a;最佳实践 如果你想了解最佳实践并学习技巧&#xff0c;请务必关注以下专家&…...

有关串口的知识点

轻微了解 一般都是 前这俩01 Ren1才能接受 开局T1 R1要给0 所以就是0x50的起手 终端服务是接受的 ———————————————————————————— 进入实际引用 使用的时候1 初始化 2要给个500ms的延时函数即可...

无线插卡话机如何接入呼叫中心系统?

一、接入原理与技术架构 ​ ​无线插卡话机通过内置SIM卡模块&#xff08;支持GSM/CDMA/4G/5G等网络制式&#xff09;&#xff0c;将移动网络信号转化为语音通信信号&#xff0c;再通过SIP协议或专用网关与呼叫中心系统对接。其核心流程包括&#xff1a; ​ ​1、网络信号…...

prometheus有几种数据类型

Prometheus 数据类型主要有以下四种&#xff1a; Counter&#xff08;计数器&#xff09;&#xff1a; 单调递增的数值&#xff0c;表示某个事件发生的次数。计数器的值只会增加&#xff0c;除非被重置为0&#xff08;例如在系统重启时&#xff09;。示例&#xff1a;HTTP 请求…...

C++设计模式+异常处理

#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <stdexcept> // 包含异常类using namespace std;// 该作业要求各位写一…...

字符串替换 (模拟)神奇数 (数学)DNA序列 (固定长度的滑动窗口)

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;每日两三题 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 字符串替换 &#xff08;模拟&#xff09;神奇数 &#xff08;数学&#xff09;DNA序列 &#xff08;固定长度的滑动窗口&am…...

echarts地图详解

获取地图坐标json数据 <template><div id"china-map" style"width:500px;height:500px"></div> </template> <script>import * as echarts from echarts;// 坐标jsonimport chinaJson from "/assets/china.json" …...

Redis 哨兵模式:告别手动故障转移!

目录 前言一、 Redis哨兵模式是啥&#xff1f;&#x1f914;二、 为什么需要哨兵模式&#xff1f;&#x1f937;‍♀️三、 哨兵模式的原理是什么&#xff1f;&#x1f91d;1. 监控&#xff08;Monitoring&#xff09;2. 信息共享与客观下线判断3. 哨兵领导者选举4. 故障转移5.…...

地理数据输出

为了便于数据共享和交换&#xff0c;可以将地理数据库中的要素数据输出为Shapefiles或者Coverage&#xff0c;将相应的属性表输出为Info或者dBase格式的数据文件。 1.输出为 Shapefile (1)在AreCatalog目录树或者内容栏中&#xff0c;右键点击需要输出的地理要素类&#xff0c;…...

springboot + security + redis + jwt 实现验证登录上

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

SomeIP通讯机制

在SOME/IP协议中&#xff0c;通讯方式主要围绕服务的交互模式进行的设计&#xff0c;核心机制包括Event&#xff08;时间&#xff09;、Method&#xff08;方法&#xff09;以及其变种Fire-and-Forget&#xff08;FF&#xff09;。以下是SOME/IP中所有通信方式的总结&#xff1…...

线代第三课:n阶行列式

引言 行标取自然排列 不同行不同列的3个元素相乘 列标取排列的所有可能 列标排列的逆序数的奇偶性决定符号&#xff0c;- n阶行列式 第一种&#xff1a;按行展开 (1) 行标取自然排列 (2) 列标取排列的所有可能 &#xff08;PS&#xff1a;可以理解为随意取&#xff09; (3) 从…...

人工智能在高中教育中的应用现状剖析与挑战应对

第一章&#xff1a;绪论 1.1 研究背景与意义 随着全球化的加速和科技的飞速发展&#xff0c;高中教育在培养未来社会所需人才方面的重要性日益凸显。高中阶段是学生知识体系构建和思维能力发展的关键时期&#xff0c;然而&#xff0c;当前高中教育面临着诸多挑战&#xff0c;…...

如何在powerbi使用自定义SQL

我们在刚使用到powerbi的时候发现当直接连接到数据库的时候我们只能使用数据库中已存在的表&#xff0c;我们没有办法使用自定义SQL来准备数据&#xff0c;这给我们的开发造成很大的困扰&#xff1b;我目前使用的是vertica数据库&#xff0c;首先我们需要在本地有vertica的驱动…...

边缘计算盒子是什么?

边缘计算盒子是一种小型的硬件设备&#xff0c;通常集成了处理器、存储器和网络接口等关键组件&#xff0c;具备一定的计算能力和存储资源&#xff0c;并能够连接到网络。它与传统的云计算不同&#xff0c;数据处理和分析直接在设备本地完成&#xff0c;而不是上传到云端&#…...

【C++面向对象】封装(上):探寻构造函数的幽微之境

每文一诗 &#x1f4aa;&#x1f3fc; 我本将心向明月&#xff0c;奈何明月照沟渠 —— 元/高明《琵琶记》 译文&#xff1a;我本是以真诚的心来对待你&#xff0c;就像明月一样纯洁无瑕&#xff1b;然而&#xff0c;你却像沟渠里的污水一样&#xff0c;对这份心意无动于衷&a…...

物联网|无人自助台球厅源码|哪些框架支持多设备连接?

在无人自助台球厅的智能化管理中&#xff0c;物联网&#xff08;IoT&#xff09;技术是核心支撑。如何实现不同设备&#xff08;如智能门锁、环境传感器、支付终端、灯光控制系统等&#xff09;的高效连接与协同工作&#xff0c;是系统开发的关键挑战。本文将带大家探讨支持多设…...

单旋翼无人机(直升机)和四旋翼无人机优势对比

以下是无人机直升机&#xff08;单旋翼无人机&#xff09;与四旋翼无人机的优势对比分析&#xff0c;分场景阐述两者的核心差异&#xff1a; ‌一、无人机直升机&#xff08;单旋翼无人机&#xff09;的优势‌ ‌1. 高能量效率&#xff0c;长续航‌ ‌动力设计‌&#xff1a;单…...

微服务之间调用外键“翻译”的方法概述

写在前面的话&#xff1a;减少strean流操作&#xff0c;减少多层嵌套for循环。使用普通for循环和map的方式进行转换&#xff0c; 第一步查询数据 List<Student> findList studentDao.findList(findMap); 第二步准备遍历和赋值 if(CollectionUtil.isNotEmpty(findLis…...

Java学习——day25(多线程基础与线程创建方式)

文章目录 1. 多线程基础1.1 线程的概念1.2 线程的生命周期 2. 创建线程的方式2.1 继承 Thread 类2.2 实现 Runnable 接口 3. 实践&#xff1a;编写简单多线程程序4. 总结与思考 1. 多线程基础 1.1 线程的概念 线程 (Thread)&#xff1a; 程序执行的最小单元&#xff0c;一个进…...

2025前端面试题

Vue 3 比 Vue 2 更快的原因 Vue 3 使用 JavaScript 的 Proxy 替代了 Vue 2 中的 Object.defineProperty 来实现响应式系统。Proxy 可以拦截对象的所有操作&#xff0c;无需像 Object.defineProperty 那样单独定义每个属性的 getter 和 setterVue 3 还引入了静态树提升&#xf…...

2025-04-09 吴恩达机器学习6——神经网络(1):介绍

文章目录 1 神经网络介绍1.1 起源与发展1.2 生物神经元 vs. 人工神经元1.3 学习建议 2 案例&#xff1a;T 恤预测2.1 基础概念2.2 需求预测示例2.3 多隐藏层神经网络2.4 神经网络的优势 3 案例&#xff1a;图像感知3.1 计算机视觉任务3.2 神经网络架构 1 神经网络介绍 1.1 起源…...

Win11新功能更新:中文语音控制、游戏体验提升、锁屏更多广告

近日&#xff0c;微软在Windows 11发布预览版&#xff08;Insider Release Preview Channel&#xff09;中公布了即将正式推送的一系列新功能。这些更新体现了微软“持续创新”策略——不再依赖传统大型版本更新&#xff0c;而是以更高频率为用户带来功能改进。这一波新功能覆盖…...

Cursor编程-从入门到精通__0409

早期的Github Copilot 最近更新了&#xff0c;支持Agent编程&#xff0c;字节跳动Trae使用&#xff08;免费&#xff09;&#xff0c;但成熟程度不如Cursor&#xff0c;Cursor前50次免费 Copilot VS Cursor*** 1&#xff0c;Cursor VSCode 二次开发&#xff0c;IDE级别 2&…...

【Leetcode-Hot100】移动零

题目 解答 首先&#xff0c;使用的解题思路是&#xff1a;使用两个指针&#xff0c;分别指向数组的第一个0元素位置&#xff0c;以该元素位置1为起始点寻找接下来第一个非0元素位置。二者确定后&#xff0c;对其进行交换。随后继续寻找下一个0元素位置。重复上述操作。 但第一…...

【力扣hot100题】(079)划分字母区间

感觉智商又回来了&#xff08;松气&#xff09;。 方法大概是先建立哈希表遍历数组记录每一个字母位置的跨度&#xff0c;然后再遍历数组&#xff0c;每次遇到跨度大于目前长度的字母&#xff0c;就将目前长度延申跨度的长度&#xff0c;然后继续遍历&#xff0c;知道位置已经…...

更改CMD背景图片

1.下载microsoft powershell 总之,电脑里面要有microsoft powershell这个应用 如下所示 进入界面后, 依次点击命令提示符和外观。 进入后,修改背景图片 2. 查看最终效果 最终我们打开CMD界面, 然后查看。 最终结果大功告成...

如何利用AI工具进行抠图

软件介绍 AIArty Image Matting是一款AI抠图软件&#xff0c;为了方便大家使用&#xff0c;我已经将软件所需的模型下载好。 首先要进行软件安装并运行&#xff0c;之后将“model”压缩包解压&#xff0c;把解压后的文件复制粘贴到“C:\ProgramData\Aiarty\ImageMatting”文件…...

一个很好用的vue2在线签名组件

在前端开发的日常工作中&#xff0c;我们常常会遇到需要用户进行在线签名的需求&#xff0c;比如电子合同签署、表单确认等场景。最近&#xff0c;我在项目里使用了一款极为好用的 Vue2 在线签名组件&#xff0c;今天就来和大家分享一下使用心得。 效果图 上代码 在 views 下…...

软考高级-系统架构设计师 案例题-软件架构设计

文章目录 软件架构设计质量属性效用树&#xff0c;质量属性判断必背概念架构风格对比MVC架构J2EE四层结构面向服务架构SOA企业服务总线ESB历年真题【问题1】 &#xff08;12分)【问题2】&#xff08;13分&#xff09; 参考答案历年真题【问题1】&#xff08;12分&#xff09;【…...

计算机网络笔记-分组交换网中的时延

一、分组交换网络中的四种时延类型 1. 排队时延 在队列中&#xff0c;当分组在链路上等着被传输时的时延为排队时延&#xff0c;一个分组的排队时延长度取决于该分组前方等待传输的分组数量&#xff0c;如果排队队列为空&#xff0c;且没有正在传输的分组那么该分组的排队时延…...

数据结构与算法-图论-复习2(差分约束,强连通分量,二分图,LCA,拓扑排序,欧拉路径和欧拉回路)

7. 差分约束 原理 差分约束系统是一种特殊的不等式组&#xff0c;形如 xi​−xj​≤c。可以将其转化为图论中的最短路或最长路问题。 最短路求最大值&#xff1a;当我们要找出满足所有不等式的最大解时&#xff0c;使用最短路算法。对于不等式 xi​−xj​≤c&#xff0c;可以…...