8.1分发饼干(LC455-E)

news2024/12/29 15:56:27

算法:

局部最优:大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个。

全局最优:喂饱尽可能多的小孩

为什么局部最优能推出全局最优?

贪心算法没必要用数学方法去证明,如果想不出明显的反例,那就用贪心算法试试好了。

举个例子理解:

这个例子可以看出饼干 9 只有喂给胃口为 7 的小孩,这样才是整体最优解(输出3),并想不出反例,那么就可以撸代码了。

代码思路:

1.先把g和s排序

局部最优是大饼干喂给胃口大的,那怎么找出哪个大呢?所以要先排序!

2.要遍历胃口和饼干,那就要用for循环

注意顺序:先遍历胃口g(for循环),再遍历饼干s(在for循环里用if控制),若s[i] >= g[i],则满足一个输出,结果result++

可不可以 先遍历 饼干,再遍历胃口呢?

不可以。

试一下,如果 for 控制的是饼干, if 控制胃口,就会出现如下情况 :

if 里的 index 指向 胃口 10, for 里的 i 指向饼干 9,因为 饼干 9 满足不了 胃口 10,所以 i 持续向前移动,而 index 走不到s[index] >= g[i] 的逻辑,所以 index 不会移动,那么当 i 持续向前移动,最后所有的饼干都匹配不上。

所以 一定要 for 控制 胃口,里面的 if 控制饼干。

调试过程:

第一次调试:

原因:

int result初始化没有赋值。
        int result = 0;
int类型的length是属性,不用括号;而String的length是方法,需要括号
        s.length

        g.length
在 Java 中,数组并没有名为 `sorted` 的方法。要对数组进行排序,可以使用 `Arrays.sort` 方法。
        Arrays.sort(g);

        Arrays.sort(s);

第二次调试:

原因:

在写s[index] >= g[i]时,index不一定合法,比如s为空时,index=-1,为负值,无法作为索引

所以应改为:

if (index >=0 && s[index] >= g[i]) 

正确代码:

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        //先排序,默认从小到大
        Arrays.sort(g);
        Arrays.sort(s);
        int result = 0;
        int index = s.length -1;
        //for控制胃口g,if控制饼干s
        for (int i =g.length-1; i >= 0; i-- ){
            if (index >=0 && s[index] >= g[i]) {
                result ++;
                index--;
            }
        }
        return result;


    }
}

时间空间复杂度:

时间复杂度分析

  • 排序数组 `g` 和 `s` 的时间复杂度为O(nlog⁡n),其中 n 是数组的长度。
  • 遍历数组 `g` 的时间复杂度为 O(n),其中 n 是数组的长度。
  • 在最坏的情况下,我们需要遍历数组 `g` 一次,因此总体时间复杂度为O(nlog⁡n)。

空间复杂度分析

  • 算法的空间复杂度为 O(1),因为它只使用了常数级别的额外空间来存储一些变量,与输入的规模无关。

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

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

相关文章

C++开发小技巧

C开发一些小技巧 积累一些能用得到的C开发小技巧。 错误码/状态码 错误码/状态码在项目很常见,用于提示错误类型、状态,通常还会附带一些相关描述。通常错误码是统一管理的,例如使用宏或者枚举定义。 平时我的做法 使用宏或者枚举定义错…

Redis缓存保卫战:拒绝缓存击穿的进攻【redis问题 三】

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Redis缓存保卫战:拒绝缓存击穿的进攻 前言缓存击穿的定义和原理为何会发生缓存击穿缓存击穿的危害防范缓存击穿结语: 前言 你是否曾经遇到过系统在高并发情况下出现严重性能问题&#xff…

【ASP.NET Core 基础知识】--环境设置

一、简介 1.1 .NET Core SDK 概述 .NET Core SDK(Software Development Kit)是Microsoft推出的一个开源跨平台框架,用于开发和部署.NET应用程序。它是.NET Core平台的核心组件之一,为开发者提供了在多个操作系统上构建高性能、可…

ssm基于VUE的图书馆管理系统的设计与实现论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#x…

imazing破解版百度云2.17.3(附激活许可证下载)

iMazing是一款强大的 iOS 设备管理软件,不管是 iPhone、iPad 或 iPod Touch 设备,只要将 iOS 设备连接到计算机,就可以处理不同类型的数据。 iPhone 和 iPad 备份 借助 iMazing 的独有 iOS 备份技术(无线、隐私和自动&#xff09…

CarRacing DQN: 深度 Q 学习训练自驾车

OpenAI GYM CarRacing DQN: 深度 Q 学习训练自驾车 引言DQN 算法原理Q 值和 Bellman 方程DQN 结构 训练过程设计经验回放(Experience Replay)目标网络(Target Network)训练循环 训练结果和模型演变400 轮训练后500 轮训练后600 轮…

tomcat session cookie值设置逻辑

tomcat session cookie 值设置,tomcat jsessionid设置 ##调用request.getSession() Controller RequestMapping("/cookie") public class CookieController {RequestMapping("/tomcatRequest")ResponseBodypublic String tomcatRequest(HttpS…

buuctf-Misc 题目解答分解109-111

109.[CFI-CTF 2018]webLogon capture 流量包分析, wireshark 打开 就这几个数据包,追踪http 进行url 解码 URL网址解码器 - 在线网址解码 得到flag CFI{1ns3cur3_l0g0n} 110.[GKCTF 2021]excel 骚操作 下载 excel 文件 ,打开 发现点击其他地…

编程语言的发展趋势和未来方向

1、编程语言的未来? 随着科技的飞速发展,编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心,为程序员提供了与机器沟通的桥梁。那么,在技术不断进步的未来,编程语言的走向又将如何呢? 方…

通信原理期末复习——计算大题(一)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

金和OA C6 MailTemplates.aspx sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 MailTemplates.aspx接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏…

计算机毕业设计选题分享-SSM律师事务所业务管理系统01664(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM律师事务所业务管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,律师事务所业务管理系统当然也不能排除在外。律师事务所业务管理系统是以实际运用为开发背景…

牛客网BC12-字符圣诞树

字符圣诞树 解题思路: 确定行数,一共5行,循环5次确定每行答应的内容,分成两部分,空格和字符 打印空格的个数依次递减打印字符的个数依次递增 找出打印空格和字符的个数与行数之间的关系 int main() {char ch 0;scanf(…

【C++】内存对齐

本篇文章介绍C中的内存对齐,后续介绍C的union和C的variant的时候,需要用到这部分的知识。 占用内存 先回忆下C各个数据类型占用的内存大小: int:所占内存大小:4byte 32bit;char:所占内存大小…

单机部署Rancher

上次已经安装完毕了k8s了,但是想要界面化的管理,离不开界面工具,首推就是rancher,本文介绍安装rancher的安装,也可以将之前安装的k8s管理起来。 已经安装完毕docker和docker-ce的可以直接从第三部分开始。 一、基础准…

如何充值GPT会员账号?

详情点击链接:如何充值GPT会员账号? 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析,AI画图,图像识别,文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定制自己的…

五、HTML 标题

在 HTML 文档中&#xff0c;标题很重要。 一、HTML 标题 标题&#xff08;Heading&#xff09;是通过 <h1> - <h6> 标签进行定义的。<h1> 定义最大的标题。 <h6> 定义最小的标题。 <h1>这是一个标题。</h1> <h2>这是一个标题。&l…

python 模块搜索路径

前言 当我们import os的时候&#xff0c;Python解释器去哪找os模块呢&#xff1f;如果多处都有os模块&#xff0c;选择哪个os模块呢&#xff1f; 去哪找os模块&#xff1f; Python解释器不是很神奇&#xff0c;它会从以下2个地方找os模块 1、内置模块 sys.builtin_module_nam…

软件测试|深入解析Docker Run命令:创建和启动容器的完全指南

简介 Docker是一种流行的容器化平台&#xff0c;用于构建、分发和运行应用程序。其中一个最基本且重要的Docker命令是docker run&#xff0c;用于创建和启动容器。本文将详细解析docker run命令的用途、参数和示例&#xff0c;帮助您全面掌握创建和启动容器的过程。 docker r…

竞赛保研 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…