首页 > 其他分享 >LeetCode455.分发饼干

LeetCode455.分发饼干

时间:2024-07-24 18:32:37浏览次数:13  
标签:分发 LeetCode455 饼干 index 胃口 孩子 int 满足

LeetCode题目链接:https://leetcode.cn/problems/assign-cookies/description/

题目叙述

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

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

示例 1:

输入: g = [1,2,3], s = [1,1]
输出: 1
解释:
你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。
虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。
所以你应该输出1。

示例 2:

输入: g = [1,2], s = [1,2,3]
输出: 2

解释:

你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。
你拥有的饼干数量和尺寸都足以让所有孩子满足。
所以你应该输出2.

提示:

1 <= g.length <= 3 * 10^4
0 <= s.length <= 3 * 10^4
1 <= g[i], s[j] <= 2^31 - 1

思路:

这题我们可以采用贪心策略,我们如果想让满足的孩子的数量足够多,我们就得在每个步骤中尽可能多的让孩子满足,我们可以把小的饼干尽可能去满足胃口小的孩子,这样就达到了局部最优,全局

最优就是满足尽可能多的小孩,所以我们应该先对这个胃口的数组和饼干的数组进行排序。

然后从饼干小的开始,尽量满足胃口小的小孩

代码:

class Solution {
public:
	int findContentChildren(vector<int>& g, vector<int>& s) {
		sort(g.begin(), g.end());
		sort(s.begin(), s.end());
		//作为胃口数组的下标,最后index的大小就是满足小孩胃口的个数
		int index = 0;
		for (int i = 0; i < s.size(); i++) {
			//index要小于小孩的个数,并且饼干大于等于胃口时,更新下标索引
			if (index < g.size() && s[i] >= g[index]) index++;
		}
		//最后index的值就是满足的小孩的个数
		return index;
	}
};

方案2

其实,我们也可以从相反的方向出发,用大的饼干满足胃口大的小孩,同时用一个变量result来表示结果,但是这个时候我们就不是遍历饼干数组了,而是遍历小孩数组了

代码如下:

class Solution {
public:
	int findContentChildren(vector<int>& g, vector<int>& s) {
		//对数组进行排序
		sort(g.begin(), g.end());
		sort(s.begin(), s.end());
		//作为饼干数组的下标
		int index = s.size() - 1;
		//用于存放结果
		int result = 0;
		//遍历饼干数组,尽量用大的饼干满足胃口大的小孩
		for (int i = g.size() - 1; i >= 0; i--) {
			//一定要先判断index是否 >=0。否则某些情况下会运行时错误
			if (index >= 0 && g[i] <= s[index]) {
				result++;
				index--;
			}
		}
		//最后result的值就是我们要求的结果
		return result;
	}
};

标签:分发,LeetCode455,饼干,index,胃口,孩子,int,满足
From: https://www.cnblogs.com/Tomorrowland/p/18321445

相关文章

  • 在pip包中分发pythonnet dll类型信息
    我已经能够使用C#通过以下方式加载pythonnetdll:fromimportlib.resourcesimportpathimportsys#Assuming'my_package.lib'isthesub-packagecontainingtheDLLswithpath('pyrp.lib','')aslib_path:sys.path.append......
  • 代码随想录算法训练营第31天 | 贪心3:134.加油站、135.分发糖果、860.柠檬水找零、406.
    代码随想录算法训练营第31天|贪心3:134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列134.加油站https://leetcode.cn/problems/gas-station/description/代码随想录https://programmercarl.com/0134.加油站.html135.分发糖果https://leetcode.cn/problems......
  • 代码随想录算法训练营第29天 | 贪心算法1:455.分发饼干、376.摆动序列、53.最大子序和
    代码随想录算法训练营第29天|贪心算法1:455.分发饼干、376.摆动序列、53.最大子序和贪心算法基础理论https://programmercarl.com/贪心算法理论基础.html455.分发饼干https://leetcode.cn/problems/assign-cookies/description/代码随想录https://programmercarl.com/0455......
  • 代码随想录day28 分发饼干 | 摆动序列 | 最大子序和
    分发饼干分发饼干解题思路用贪心算法,胃口最大的孩子就需要尺寸最大的饼干,如果没有符合条件的饼干则换胃口第二大的孩子,以此类推。局部最优就是全局最优。知识点贪心心得简单摆动序列摆动序列解题思路通过遍历整个数组找到峰值,峰值则是找到最长的子序列,局部最优就是全......
  • Qt-事件过滤器、事件分发器、事件处理器
    前言Qt中事件的处理步骤1.当事件产生之后,Qt应用程序对象通过调用QApplication::notify()函数将事件发送到指定的窗口。2.事件在发送过程中可以通过向对象(窗口、按钮等)安装事件过滤器QObject::eventFilter()来对事件进行过滤。Qt应用程序默认不对任何产生的事件......
  • CDN在App分发中的作用
    CDN(ContentDeliveryNetwork,内容分发网络)在App分发中扮演着至关重要的角色。它通过一系列技术手段,将App的内容高效、快速地传递给用户,显著提升用户体验和下载速度。以下是CDN在App分发中的具体作用和优势:一、CDN在App分发中的作用提升下载速度:CDN分发系统能够将App的内容储存......
  • Windows Server Update Services (WSUS) 是一种由微软提供的服务器软件,允许 IT 管理员
    关于WindowsServerUpdateServices(WSUS)的漏洞,以下是一些已知的漏洞和安全问题:CVE-2021-34484:这是一个严重的远程代码执行漏洞,影响了WSUS服务器。攻击者可以通过构造特定请求利用此漏洞来执行恶意代码。CVE-2020-1317:此漏洞允许攻击者在未经身份验证的情况下获......
  • 将WSL分发到其他电脑
    有这么一个需求,要在本机的wsl-ubuntu上面安装mysql-server,需要做到与windows下mysql-server一致不区分大小写,有的副本比较容易配置成功,有的比较折腾,所以有了本文的想法,将已经配置好的wsl-ubuntu分发出来,备份到需要的机器上面去mysql>select@@lower_case_table_names;+-------......
  • 如何通过文件分发系统,实现能源电力企业文件的安全分发流转?
    随着企业业务的快速发展,能源电力企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构,因此会涉及自动化的文件分发的业务场景。文件分发系统是一种将文件从一个地方自动传输到多个接收者的过程,可以提高工作效率,确保信息的及时传递和文件的一致性。文件分发系统需要做以......
  • 代码随想录算法训练营第26天 | 455.分发饼干 53. 最大子序和
    455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这个孩子......