分发饼干问题——用贪心算法解决

目录

一:问题描述

二:解决思路

贪心策略(C语言)算法复习总结3——贪心算法-CSDN博客

 三:代码实现

四:复杂度分析


一:问题描述

分发饼干问题是一个经典的可以使用贪心算法解决的问题,问题描述如下:

有一群孩子和一堆饼干,每个孩子都有一个胃口值 g[i](表示该孩子需要的饼干的最小尺寸才能满足),每个饼干都有一个尺寸 s[j]。目标是尽可能让更多的孩子得到满足,即找到能满足的孩子的最大数量。也就是说,要将饼干分配给孩子,当且仅当饼干的尺寸大于或等于孩子的胃口值时,这个孩子才能被满足。(每个孩子最多一块饼干)

二:解决思路

贪心策略(C语言)算法复习总结3——贪心算法-CSDN博客

贪心策略是优先满足胃口值小的孩子。因为对于胃口值小的孩子,更容易找到合适尺寸的饼干来满足他,这样可以尽量让更多的孩子得到满足。具体步骤如下:

  1. 对孩子的胃口值数组 g 和饼干尺寸数组 s 分别进行排序(升序)。
  2. 用两个指针分别遍历孩子数组和饼干数组。
  3. 从胃口值最小的孩子开始,尝试用最小尺寸的饼干去满足他。如果当前饼干的尺寸大于或等于当前孩子的胃口值,那么这个孩子就被满足,两个指针都向后移动一位;如果当前饼干的尺寸小于当前孩子的胃口值,说明这个饼干不能满足这个孩子,只能尝试下一个更大尺寸的饼干,即只移动饼干数组的指针。
  4. 重复步骤 3,直到遍历完所有孩子或者所有饼干。

 三:代码实现

#include <stdio.h>
#include <stdlib.h>// 比较函数,用于 qsort 排序
int compare(const void *a, const void *b) {return (*(int *)a - *(int *)b);
}// 解决分发饼干问题的函数
int findContentChildren(int* g, int gSize, int* s, int sSize) {// 对孩子的胃口值数组和饼干尺寸数组进行排序qsort(g, gSize, sizeof(int), compare);qsort(s, sSize, sizeof(int), compare);int child_index = 0;int cookie_index = 0;// 遍历孩子和饼干数组while (child_index < gSize && cookie_index < sSize) {if (s[cookie_index] >= g[child_index]) {// 当前饼干能满足当前孩子,孩子和饼干指针都后移child_index++;cookie_index++;} else {// 当前饼干不能满足当前孩子,只移动饼干指针cookie_index++;}}return child_index;
}int main() {int g[] = {1, 2, 3};int s[] = {1, 1};int gSize = sizeof(g) / sizeof(g[0]);int sSize = sizeof(s) / sizeof(s[0]);int result = findContentChildren(g, gSize, s, sSize);printf("能满足的孩子数量是: %d\n", result);return 0;
}

四:复杂度分析

  • 时间复杂度:排序操作的时间复杂度为 (O(n log n + m log m)),其中 n 是孩子的数量,m 是饼干的数量。遍历数组的时间复杂度为 (O(min(n, m)))。所以总的时间复杂度为 (O(n log n + m log m))
  • 空间复杂度qsort 函数通常需要 (O(log n + log m)) 的额外空间,因此总的空间复杂度为 (O(log n + log m))

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

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

相关文章

【Python爬虫】简单案例介绍4

本文继续接着我的上一篇博客【Python爬虫】简单案例介绍3-CSDN博客 目录 3.4 完整代码 3.4 完整代码 此小节给出上述案例的完整代码&#xff0c; # encodingutf-8 import re, json, requests, xlwt, csv import pandas as pd from lxml import etree from bs4 import Beauti…

使用ADB工具分析Android应用崩溃原因:以闪动校园为例

使用adb工具分析模拟器或手机里app出错原因以闪动校园为例 使用ADB工具分析Android应用崩溃原因&#xff1a;以闪动校园为例 前言 应用崩溃是移动开发中常见的问题&#xff0c;尤其在复杂的Android生态系统中&#xff0c;找出崩溃原因可能十分棘手。本文将以流行的校园应用&q…

【蓝桥云课】男女搭配 python

题目 题目 题解 import mathT int(input()) for _ in range(T):N, M, K map(int, input().split())people_num N M# 目前为止可以组成的队数group_num min(N // 2, M)if people_num - group_num * 3 < K:group_num-math.ceil((K-(people_num - group_num * 3))/3)pr…

edge 更新到135后,Clash 打开后,正常网页也会自动跳转

发现了一个有意思的问题&#xff1a;edge 更新135后&#xff0c;以前正常使用的clash出现了打开deepseek也会自动跳转&#xff1a; Search Resultshttps://zurefy.com/zu1.php#gsc.tab0&gsc.qdeepseek &#xff0c;也就是不需要梯子的网站打不开了&#xff0c;需要的一直正…

MCP协议实战指南:在VS Code中实现PostgreSQL到Excel的自动化迁移

作者&#xff1a;后端小肥肠 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 从PDF到精准答案&#xff1a;Coze助力RAGFlow框架提升数据召回率_提升ragflow-CSDN博客 CozeTreeMind实测&#xff1a;秒出ISO标准流程图…

大模型微调(PEFT)

大模型微调&#xff08;PEFT&#xff09; PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;一、PEFT 核心方法1. LoRA&#xff08;Low-Rank Adaptation&#xff09;2. Adapter3. Prefix Tuning4. Prompt Tuning5. QLoRA&#xff08;Quantized LoRA&#xff09; 二…

flutter 打包mac程序 dmg教程

✅ 前提条件 ✅ 你已经在 macOS 上安装了 Android Studio Flutter SDK。 ✅ Flutter 支持 macOS 构建。 运行下面命令确认是否支持&#xff1a; Plain Text bash 复制编辑 flutter doctor ---## &#x1f9f1; 第一步&#xff1a;启用 macOS 支持如果是新项目&#xff0c;…

鸿蒙开发-动画

1. 动画-动画特效 // 定义接口 (每个列表项的数据结构) interface ImageCount {url: stringcount: number }// 需求1: 遮罩层显隐 透明度opacity 0-1 层级zIndex -1~99 // 需求2: 图片缩放 缩放scale 0-1Entry Component struct Index {// 基于接口, 准备数据State images…

js:循环查询数组对象中的某一项的值是否为空

循环检查 selinfo 数组中的每一个对象&#xff0c;判断其中的 po_qty 和 price 是否为空&#xff08;null、undefined 或空字符串 ""&#xff09;&#xff0c;可以使用以下几种方法&#xff1a; 方法1&#xff1a;使用 forEach 循环检查每一项 const selinfo this.…

x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!

目录 核心功能与特点安装优势亮点适用场景 还在为命令行下处理 JSON 数据烦恼吗&#xff1f;jellex 来了&#xff01;它是一款基于终端的交互式 JSON 和 JSON Lines 数据处理工具&#xff0c;让你用熟悉的 Python 语法&#xff0c;轻松过滤、转换和探索 JSON 数据。 核心功能与…

4月份到9月份看6本书第二天【ERP与企业管理】

ERP与企业管理 1-11章全面介绍了ERP的基本原理、物料管理功能、计划功能、生产和采购管理功能、效益以及实施和应用ERP为企业带来的深层次的变化。 第12章讨论了软件系统的选型。 第13章介绍了ERP实施和运行管理的方法 第14章介绍了国际上广泛使用的ERP实施应用的评估方法。…

Opencv计算机视觉编程攻略-第十三节 跟踪视频中的物品

这是opencv系列的最后一节&#xff0c;主要学习视频序列&#xff0c;上一节介绍了读取、处理和存储视频的工具&#xff0c;本文将介绍几种跟踪图像序列中运动物体的算法。可见运动或表观运动&#xff0c;是物体以不同的速度在不同的方向上移动&#xff0c;或者是因为相机在移动…

001 蓝桥杯嵌入式赛道备赛——基础

个人笔记&#xff0c;不扭扭捏捏&#xff0c;一口气到位。方便自己也方便大家 00 时钟线 cubeMX已经完成了大多数工作 01 LED&#xff08;GPIO输出&#xff09; 在使用LED的时候先把SN74HC573锁存器PD2置高电平&#xff0c;然后写入LED所要的高低电平&#xff0c;然后置PD2低…

案例-索引对于并发Insert性能优化测试

前言 最近因业务并发量上升,开发反馈对订单表Insert性能降低。应开发要求对涉及Insert的表进行分析并提供优化方案。   一般对Insert 影响基本都在索引,涉及表已按创建日期做了分区表,索引全部为普通索引未做分区索引。 优化建议: 1、将UNIQUE改为HASH(64) GLOBAL IND…

【技术文章的标准结构与内容指南】

技术文章的标准结构与内容指南 技术文章是传递专业知识、分享实践经验的重要媒介。一篇高质量的技术文章不仅能够帮助读者解决问题&#xff0c;还能促进技术交流与创新。以下是技术文章通常包含的核心内容与结构指南。 1. 标题 一个好的技术文章标题应当&#xff1a; 简洁明…

豪越消防一体化安全管控平台:构建消防“一张图”新生态

在城市化进程加速、建筑规模与功能日益复杂的当下&#xff0c;消防救援工作面临着诸多严峻挑战。火灾隐患如同隐藏在暗处的“定时炸弹”&#xff0c;广泛分布于城市的各个角落&#xff0c;想要快速、精准定位绝非易事。信息传递的不顺畅更是雪上加霜&#xff0c;导致救援效率大…

重学Redis:Redis常用数据类型+存储结构(源码篇)

一、SDS 1&#xff0c;SDS源码解读 sds (Simple Dynamic String)&#xff0c;Simple的意思是简单&#xff0c;Dynamic即动态&#xff0c;意味着其具有动态增加空间的能力&#xff0c;扩容不需要使用者关心。String是字符串的意思。说白了就是用C语言自己封装了一个字符串类型&a…

抖音IP属地可以随便选择地址吗?深度解析

在当今社交媒体盛行的时代&#xff0c;抖音作为受欢迎的短视频平台之一&#xff0c;其IP属地显示功能引发了广泛关注。许多用户好奇&#xff1a;抖音的IP属地是否可以随意更改&#xff1f;是否存在方法可以“伪装”自己的位置&#xff1f;‌本文将深入探讨这一话题。 一、抖音I…

SOLID原则详解:提升软件设计质量的关键

前言 关于设计原则SOLID具体指的是什么&#xff0c;怎么理解这些设计原则&#xff0c;我觉得有必要记录一笔&#xff0c;毕竟这个设计原则确实经常在关键技术文档中提及&#xff0c;在编程思想中提及&#xff0c;在日常的开发中使用&#xff0c;但是对我来说&#xff0c;似乎知…

如何使用 ONLYOFFICE 恢复之前的文件版本?

如何使用 ONLYOFFICE 恢复之前的文件版本&#xff1f; https://www.onlyoffice.com/blog/zh-hans/2023/04/how-to-use-version-history