坚持刷题|分发饼干

news2024/11/26 22:38:58

文章目录

  • 题目
  • 思路
  • 代码实现
  • 实现总结
    • 主要步骤
    • 时间复杂度
  • 扩展问题

Hello,大家好,我是阿月。坚持刷题,老年痴呆追不上我,今天刷第一个贪心算法:分发饼干

题目

455.分发饼干
在这里插入图片描述

思路

要解决这个问题,可以使用贪心算法。具体步骤如下:

  1. 首先,对孩子们的胃口值 g[i] 和饼干的尺寸 s[j] 进行排序。
  2. 然后,从胃口值最小的孩子开始遍历,尝试满足他们的胃口。
  3. 对于每个孩子,找到能够满足其胃口的最小尺寸的饼干,尽可能地用小的饼干满足孩子,以便给其他孩子留下更大的饼干。
  4. 继续这个过程,直到所有的孩子都被满足或者没有足够的饼干。

代码实现

import java.util.Arrays;

public class CookieAndChildren {

   public static int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int childIndex = 0;
        int count = 0;
        for (int i = 0; i < s.length && childIndex < g.length; i++) {
            if (s[i] >= g[childIndex]) {
                count++;
                childIndex++;
            }
            
        }
        return count;
    }

    public static void main(String[] args) {
        int[] g = {1, 2, 3};
        int[] s = {1, 1};
        System.out.println(findContentChildren(g, s)); // 输出:1

        int[] g2 = {1, 2};
        int[] s2 = {1, 2, 3};
        System.out.println(findContentChildren(g2, s2)); // 输出:2
    }
}

实现总结

这个问题考察的是贪心算法的应用。贪心算法是一种在每一步选择中都采取当前状态下最优决策的策略,从而希望导致全局最优解。

在这个问题中,要尽可能地满足更多数量的孩子,因此采取了贪心策略:首先对孩子的胃口值和饼干的尺寸进行排序,然后从胃口值最小的孩子开始遍历,并尽可能用小的饼干满足他们的胃口。这样做的原因是,如果用一个大的饼干去满足一个小胃口的孩子,那么这个大饼干就可能无法满足更大胃口的孩子,导致最终满足的孩子数量较少。因此,选择尽可能小的饼干来满足胃口最小的孩子可以使得留下的饼干更有可能满足后面的孩子。

主要步骤

  1. 首先,对孩子的胃口值数组 g 和饼干的尺寸数组 s 进行排序,以便后续能够按照从小到大的顺序进行匹配。
  2. 使用两个变量 startcount 分别表示当前要满足的孩子的索引和已满足孩子的数量。初始化 start 为 0,count 为 0。
  3. 使用一个循环遍历饼干数组 s,并在循环中对比当前饼干的尺寸是否能够满足当前孩子的胃口。如果能够满足,则将 count 加一,并将 start 向后移动一位,表示已满足一个孩子。
  4. 最后返回满足孩子的数量 count
    这个实现利用了数组的排序,使得在遍历饼干数组时可以更有效地匹配满足孩子的胃口。同时,通过一次遍历,即可确定最终满足的孩子数量,具有较高的效率。

时间复杂度

这段代码的时间复杂度取决于两个排序操作和单次遍历操作。

  1. 对孩子的胃口值数组 g 和饼干的尺寸数组 s 进行排序的时间复杂度为 O(n log n),其中 n 是数组的长度。
  2. 单次遍历操作的时间复杂度为 O(n),其中 n 是较小的数组的长度(饼干数组或孩子数组)。
    因此,总的时间复杂度为 O(n log n),其中 n 是较小的数组的长度。

扩展问题

在面试或者工作学习中,可能会有进一步的问题。

  1. 问:为什么要对孩子的胃口值和饼干的尺寸进行排序?

    答: 对孩子和饼干进行排序的目的是为了更有效地匹配饼干和孩子。通过排序,我们可以在一次遍历中完成所有匹配,而无需额外的操作。这样做还可以使得算法更简洁高效。

  2. 问:这个算法的时间复杂度是多少?

    答: 这个算法的时间复杂度是 O(n log n),其中 n 是较小的数组的长度。这是因为在排序阶段需要对数组进行排序,而排序算法的时间复杂度通常是 O(n log n),而后面的单次遍历操作的时间复杂度为 O(n)。

  3. 问:有没有其他方法来解决这个问题?

    答: 是的,还可以使用其他方法来解决这个问题,例如递归、动态规划等。但是在这个问题中,贪心算法是一种简单而有效的解决方法,可以在 O(n log n) 的时间复杂度内得到解决。

  4. 问:如果孩子或饼干的数量非常大,会对这个算法的性能有什么影响?

    答: 如果孩子或饼干的数量非常大,可能会导致排序操作的时间开销变得非常显著。此时,选择更适合大规模数据的排序算法(如快速排序)可能是一个更好的选择。另外,在极端情况下,可能需要考虑优化算法以减少排序的时间复杂度,或者使用并行化技术来加速排序过程。

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

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

相关文章

解锁AI提示工程新纪元:你的提问是关键!

文章目录 一、AI的潜力&#xff1a;无尽的宝藏等待解锁二、提问的艺术&#xff1a;挖掘AI潜力的关键三、AI的回应&#xff1a;超越预期的答案与启示四、提问的力量&#xff1a;推动AI不断进步与发展五、用提问开启与AI的智慧对话《向AI提问的艺术&#xff1a;提示工程入门与应用…

C++中的面向对象到底是什么

C中的面向对象到底是什么 对象嘛&#xff0c;就和大家都有的对象一样&#xff0c;两只眼睛、一个嘴巴、两条腿…… 对不起跑题了&#xff0c;C的面向对象中的对象可不是显示中的对象哦&#xff0c;但是有一些相似之处&#xff0c;有对象的同学可以参考着去学习C面向对象的概念…

niushop单商户V5多店版源码分享三端uniapp打包方法包括PC端_小程序或h5端打包_收银端打包_APP端打包_商户端

目前多店版有四端uniapp&#xff0c;包括PC端uniapp&#xff0c;商家端uniapp&#xff0c;收银端uniapp&#xff0c;门店手机端uniapp&#xff0c;下面我总结下这些端的打包流程希望能帮助到大家&#xff0c;需要交流的可以看我昵称或者点我头像关注我分享代码和教程 一.niush…

原创歌曲分享平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等 功能包含: 成语大全 二十四节气 英语单词 古诗词 近反义词 词语造句 汉语字典 英文缩写 百家姓 范文文库 文件目录:1个数据库 1个系统源码 1个伪静态规则 安装方式:把1.2G的…

数据结构:非比较排序

非比较排序都具有很大的局限性,包括技术排序,基数排序,桶排序等 计数排序 时间复杂度:O(N) 空间复杂度:O(range) 适用范围 数据的范围集中的数组进行排序,不适合数据分散的数组 方法 统计每个数据出现的次数为n 建立一个相同大小的数组,将每个数据都初始化为0 然后遍历…

在Windows的Docker上部署Mysql服务

在我们做一些和数据库相关的测试时&#xff0c;往往需要快速部署一个数据库作为数据源。如果开发环境是Windows&#xff0c;且开发的代码不依赖于系统&#xff0c;即不用在linux上做开发&#xff0c;则可以将全套环境都部署在Windows上。 本地安装数据库会污染操作系统环境&…

面试题 之 vue

1.vue里怎样实现双向数据绑定&#xff1f; Viewmodel 中的Domlisteners 工具会帮我们检测页面上Dom元素的变化&#xff0c;如果有变化&#xff0c;则更改Model中的数据&#xff0c;更新model中的数据时&#xff0c;数据事件绑定工具会帮我们更新页面中的Dom元素 2.Vue的响应式原…

Autosar-诊断配置详解(免费)-1

1DcM功能简介 诊断通信管理(Diagnostic Communication Manager, DCM)模块作为AutoSar诊断模块的重要组成部分&#xff0c;主要负责诊断数据流和管理诊断状态&#xff0c;包括诊断会话、安全状态及诊断服务分配等。 主要功能贯穿汽车的开发生产及售后等过程&#xff0c;如开发过…

零基础入门转录组数据分析——DESeq2差异分析

零基础入门转录组数据分析——DESeq2差异分析 目录 零基础入门转录组数据分析——DESeq2差异分析1. 转录组分析基础知识2. DESeq2差异分析&#xff08;Rstudio&#xff09;3. 结语 1. 转录组分析基础知识 1.1 什么是转录组&#xff1f; 转录组&#xff08;transcriptome&#…

MATLAB近红外光谱分析技术应用

郁磊副教授&#xff0c;主要从事MATLAB编程、机器学习与数据挖掘、数据可视化和软件开发、生理系统建模与仿真、生物医学信号处理&#xff0c;具有丰富的实战应用经验&#xff0c;主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发表多篇高水…

STC8H8K64U 学习笔记 - PWM

STC8H8K64U 学习笔记 - PWM 环境说明引脚说明 PWM呼吸灯震动马达 乐谱 环境说明 该内容仅针对我自己学习的开发板做的笔记&#xff0c;在实际开发中需要针对目标电路板的原理图进行针对性研究。 芯片&#xff1a;STC8H8K64U烧录软件&#xff1a;stc-isp-v6.92G编码工具&#xf…

springJPA如果利用注解的方式 进行多表关联操作

前言:上一篇我写了个用JPA的Specification这个接口怎么做条件查询并且进行分页的,想学的自己去找一下 地址:springJPA动态分页 今天我们来写个 利用jpa的Query注解实现多表联合查询的demo 注意: 不建议在实际项目中用这玩意. 因为: 1. 用Query写的sql 可读性极差,给后期维护这…

C++读取bin二进制文件

C读取bin二进制文件 在C中&#xff0c;可以使用文件输入/输出流来进行二进制文件的读写操作&#xff0c;方便数据的保存和读写。 //C读取bin二进制文件 int read_bin() {std::ifstream file("data_100.bin", std::ios::in | std::ios::binary);if (file) {// 按照二…

go发布包到github

1. 首先&#xff0c;我们在github上创建一个公有仓库并clone到本地 git clone https://github.com/kmust-why/gdmp-token.git cd gdmp-token/ 2. 在gdmp-token工程中初始化go.mod&#xff0c;其中后面的链接要跟github上创建的仓库和你的用户名对应 go mod init github.com/…

手撕算法-有效的括号

描述 分析 使用栈&#xff0c;如果是左括号&#xff0c;入栈&#xff0c;如果是右括号&#xff0c;判断栈是否为空&#xff0c;不是空出栈并校验是否匹配&#xff0c;不匹配返回false。最后如果栈为空&#xff0c;返回true。 代码 class Solution {public boolean isValid(…

【Vue3源码学习】— CH2.6 effect.ts:详解

effect.ts&#xff1a;详解 1. 理解activeEffect1.1 定义1.2 通过一个例子来说明这个过程a. 副作用函数的初始化b. 执行副作用函数前c. 访问state.countd. get拦截器中的track调用e. 修改state.count时的set拦截器f. trigger函数中的依赖重新执行 1.3 实战应用1.4 activeEffect…

Pyhon 大模型常见的微调方式,LLMs常见的Finetune方式;chatglm3微调实战;大模型微调通俗易懂总结

一、 LLMs微调 微调&#xff08;Fine-tuning&#xff09;是指在一个已经训练好的神经网络模型基础上&#xff0c;使用额外的数据集或调整超参数&#xff0c;以实现特定任务的训练过程。在微调中&#xff0c;通常会固定预训练模型的大部分参数&#xff0c;只调整最后几层或特定层…

依赖倒转原则

1.1 MM请求电脑 MM电脑坏了&#xff0c;需要修电脑&#xff0c;是因为每次打开QQ,一玩游戏&#xff0c;机器就死了。出来蓝底白字的一堆莫名奇妙的英文。蓝屏死机了&#xff0c;估计内存有问题。 1.2 电话遥控修电脑 遥控修理电脑&#xff0c;打开内存条&#xff0c;两根内存…

前端JS商品规格组合

给定一个数组 let data [{name: "颜色",specs: ["白色", "黑色"],},{name: "尺寸",specs: ["14寸","15寸", "16寸"],},{name: "处理器",specs: ["i5", "i7", "i9&…