Day27- 贪心算法part01

一、分发饼干

题目一:455. 分发饼干

455. 分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

算法的思路是尽可能地满足胃口最小的孩子,这样可以尽可能多地满足更多的孩子。

首先对孩子的胃口值和饼干尺寸进行排序。

然后遍历每块饼干,尝试找到能够满足当前胃口最小孩子的饼干。

如果找到了,就将这个孩子从列表中移除,并继续到下一块饼干,否则就检查下一块饼干。

g 是一个整数向量,表示每个孩子的胃口值

s 是另一个整数向量,表示每块饼干的尺寸。函数返回能满足的孩子的最大数量。

/** @lc app=leetcode.cn id=455 lang=cpp** [455] 分发饼干*/// @lc code=start
class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {std::sort(g.begin(), g.end()); std::sort(s.begin(), s.end()); int child = 0, cookie = 0;while (child < g.size() && cookie < s.size()) {if (g[child] <= s[cookie]) {child++;}cookie++;}return child; }
};
// @lc code=end

二、摆动序列

题目一:376. 摆动序列

376. 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

  • 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

  • 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

贪心算法的核心思想是遍历数组,记录每次数字序列摆动的变化(即差值由正变负或由负变正),不需要关心摆动的具体大小,只需要知道它是上升还是下降。

nums 是一个整数数组,函数返回作为摆动序列的最长子序列的长度。

首先检查数组长度,如果长度小于2,则直接返回数组长度。

然后使用两个变量,一个用来存储前一个差值 prevDiff,另一个用于计数摆动序列的长度。

接着遍历数组,对于每个新的差值,如果它和前一个差值构成摆动,就更新计数器和 prevDiff

最后返回计数器的值作为最长摆动序列的长度。

/** @lc app=leetcode.cn id=376 lang=cpp** [376] 摆动序列*/// @lc code=start
class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 2) {return nums.size();}int prevDiff = nums[1] - nums[0];int count = prevDiff != 0 ? 2 : 1;for (int i = 2; i < nums.size(); ++i) {int diff = nums[i] - nums[i - 1];if ((diff > 0 && prevDiff <= 0) || (diff < 0 && prevDiff >= 0)) {count++;prevDiff = diff;}}return count;}
};
// @lc code=end

三、最大子数组和

题目一:53. 最大子数组和

53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

贪心算法的实现更加强调在和变为负数时的决策。当当前子数组的和小于0时,意味着它对于后续子数组的和只会有负面影响,因此应该从下一个元素开始重新计算子数组的和。

在这段代码中,遍历数组 nums,不断更新 currentSum

如果 currentSum 变成负数,将其重置为0,并从下一个元素开始计算新的子数组和。

同时持续追踪并更新遇到的最大子数组和 maxSum

最后返回 maxSum 作为答案。

/** @lc app=leetcode.cn id=53 lang=cpp** [53] 最大子数组和*/// @lc code=start
class Solution {
public:int maxSubArray(vector<int>& nums) {int maxSum = nums[0];int currentSum = 0;for (int num : nums) {currentSum += num;maxSum = std::max(maxSum, currentSum);if (currentSum < 0) {currentSum = 0;}}return maxSum;}
};
// @lc code=end

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

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

相关文章

分布式系统中数据库和缓存双写一致性的实现技术

标题&#xff1a;分布式系统中数据库和缓存双写一致性的实现技术 在分布式系统中&#xff0c;为了确保数据库和缓存之间的数据一致性&#xff0c;双写一致性成为了一个关键的挑战。本文将深入探讨如何利用一些常见的技术手段来保证数据库和缓存的双写一致性&#xff0c;以及通…

多线程——CAS

什么是CAS CAS的全称&#xff1a;Compare and swap&#xff0c;字面意思就是&#xff1a;“比较并交换”&#xff0c;一个CAS涉及到以下操作&#xff1a; 假设内存中的原数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B 1.比较A与V是否相等&#xff08;比较&#xf…

antd pro项目部署到gitpage白屏

先总结一下如何部署项目到gitpage 1.新建分支gh-pages 2.把打包好的文件放在这个分支下 3. 之前打开一直白屏&#xff0c;有很多坑 第一个&#xff0c;import { getIntl } from umijs/max;这个引入要&#xff0c;不能是./引入的 第二个&#xff0c;新建一个config.prod.t…

@Autoware和@Resource区别

Autowired和Resource区别 一、相同点 作用都是将bean属性注入到对应的属性中去。 二、区别 1、注入方式 &#xff08;1&#xff09;Autowired的注入顺序是先按照bean的类型&#xff08;byType&#xff09;&#xff0c;再按照bean的名字&#xff08;byName&#xff09;。 &…

盘点2023年信息系统故障

安全生产&#xff0c;人人有责。每年信息系统安全事件层出不穷&#xff0c;作为一线运维人员对这些生产安全故障当抱有敬畏之心&#xff0c;并从中总结经验教训&#xff0c;分析原因&#xff0c;不能简单的调侃为开猿节流、降本增笑的结果。本文简要盘点2023年发生的主要信息系…

Java NIO (一)简介(备份)

1 NIO简介 在1.4版本之前&#xff0c;Java NIO类库是阻塞IO&#xff0c;从1.4版本开始&#xff0c;引进了新的异步IO库&#xff0c;被称为Java New IO类库&#xff0c;简称为Java NIO。New IO类库的目的 就是要让Java支持非阻塞IO。 Java NIO类库包含三个核心组件&#xff1a; …

Shell基本操作(2)

文件显示与编辑 连接并显示文件内容 cat cat[options] file... options -n加上行号 -s将连续两行以上的空白行替换为一行如果file不止一个文件&#xff0c;则会将它们连接起来如果想一次只看一页&#xff0c;可以使用more或者less命令 过滤文件内容grep grep命令可以查找拥…

Vue和小程序的区别

一.生命周期不一样&#xff1a; 1.1小程序生命周期&#xff1a;onLoad页面加载、onShow页面显示、onReady页面初次渲染完成、onHide页面隐藏、onUnload页面卸载 1..2 vue生命周期&#xff1a;data、mouted、beforeupdate、updated、beforedestory、destroyed二.数据请求时间不一…

【STM32CubeMX串口通信详解】USART1 -- DMA发送 + DMA空闲中断 接收不定长数据

文章目录&#xff1a; 前言 一、准备工作 1、接线 2、新建工程 二、CubeMX的配置 1、USART1 配置 异步通信 2、通信协议参数 3、打开DMA发送、接收 三、发送操作、代码解释 四、printf 重定向到USART1 五、接收代码的编写 1、定义一个结构体变量&a…

【Vue常用控件详细介绍】

Vue常用控件详细介绍 1. 常用控件1.1 常用控件示例1.2 修饰符 2. 数据绑定3. 指令4. 组件5. 内置组件6. 表单控件绑定7. 插槽&#xff08;Slots&#xff09;8. 异步组件 1. 常用控件 Vue.js 是一个流行的前端 JavaScript 框架&#xff0c;常用于开发单页应用&#xff08;SPA&a…

java连接sql server 2008示例

本文将以jtds作为驱动包来连接&#xff0c;简单方便&#xff01; 使用官方的驱动包可能会遇到如下报错&#xff1a;jdbc SQLServer Error: “The server selected protocol version TLS10 详见&#xff1a;https://blog.csdn.net/lxyoucan/article/details/125681677 这让部署…

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(4)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

金和OA jc6 Upload 任意文件上传漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

学习笔记:在华为昇腾NPU上进行深度学习项目【未完待续】

在NPU上做深度学习算法 场景和功能说明系统信息查询1、场景一&#xff1a;非NPU上训练的模型推理1.1 执行方案学习案例 1.2 CPU/GPU训练的模型转.ONNX模型1.3 onnx转om1.4 om推理 昇腾社区链接&#xff1a; 昇腾社区-官网丨昇腾万里 让智能无所不及 场景和功能说明 第一种&am…

༺༽༾ཊ—设计-七个原则-模式—ཏ༿༼༻

第一原则&#xff1a;单一职责 一个类只负责一个功能领域中的相应职责&#xff1b; 接下来我们举一个代码例子&#xff0c;主要的功能实现是&#xff1a; 在主函数中运行调用描边工具和填充工具画矩形与圆形 首先写一个圆形类&#xff0c;里面只有一个方法用来返回string类型…

openssl3.2 - 官方demo学习 - mac - cmac-aes256.c

文章目录 openssl3.2 - 官方demo学习 - mac - cmac-aes256.c概述笔记END openssl3.2 - 官方demo学习 - mac - cmac-aes256.c 概述 指定加密算法(e.g. AES-256-CBC), 对明文生成MAC数据 笔记 /*! \file cmac-aes256.c \note openssl3.2 - 官方demo学习 - mac - cmac-aes256.…

SAP中采购文档价格条件可以删除吗?

首先要声名&#xff0c;基于采购价格条件的严谨性和历史追朔需求&#xff0c;删除属于危险操作。不建议普通用户去执行操作。如果有兴趣&#xff0c;在测试系统中自行测试一下即可。正式系统中&#xff0c;还请慎重处理。 笔者公司日常不会去删除采购价格&#xff0c;日常处理…

Word2Vec的CBOW模型

Word2Vec中的CBOW&#xff08;Continuous Bag of Words&#xff09;模型是一种用于学习词向量的神经网络模型。CBOW的核心思想是根据上下文中的周围单词来预测目标单词。 例如&#xff0c;对于句子“The cat climbed up the tree”&#xff0c;如果窗口大小为5&#xff0c;那么…

字符串与数组的异同

Java 中的字符串&#xff08;String&#xff09;和数组&#xff08;Array&#xff09;是两种不同类型的数据结构&#xff0c;它们有一些相似之处&#xff0c;同时也有一些显著的区别。 相同之处&#xff1a; 存储多个元素&#xff1a; 字符串和数组都用于存储多个元素。 使用…

微信小程序(四)页面跳转

注释很详细&#xff0c;直接上代码 新增内容 1.相对路径页面跳转 2. 绝对路径页面跳转 index.wxml <!-- navigator是块级元素&#xff0c;占一整行 --> <!-- 页面跳转url&#xff0c;相对路径 --> <navigator url"../logs/logs"><button type&…