第八章贪心算法——理论基础,分发饼干题目

news/2024/5/15 20:54:30

目录

概念

什么时候使用

题目举例

分发饼干

力扣题号;455. 分发饼干 - 力扣(LeetCode)

题目描述

示例 1:

示例 2:

解法一:排序+暴力

解法二:贪心

思路

代码实现

总结


概念

        贪心算法是一种在每一步选择中都采取当前看起来最好的选择的算法,也就是说,它做出选择后就再也不改变,也不考虑未来可能的影响。简单来说,贪心算法在选择的过程中,每一步都选择局部最优,从而希望得到整体的最优。也就是:通过局部最优,得到全局最优

        贪心算法并不能保证总是得到最优解,但对于许多问题来说,贪心算法能产生最优解。如最小生成树,霍夫曼编码等,可以证明贪心选择性质对于问题的解是最优的。

        贪心算法主要适用于需要对问题求最优解的情况,而贪心算法一般由构造子问题的最优解能逐步得到整个问题的最优解。

        如:最小生成树,单元最短路径,某些类型的装载问题和区间问题等。

        要注意的是,贪心算法并不适用于所有问题,很多问题可能看起来使用贪心很合理,但却无法得到最优解。在具体应用时,需要对问题进行深入的分析和理解。

        因此,我们可以说贪心算法是一种有效但应用有局限性的策略。

什么时候使用

        这个真的找不到一个完美的分界线作为答案,一个比较勉强的说法是当你对一个策略举反例,当你举不出来的时候就可以试试贪心算法了。

题目举例

分发饼干

力扣题号;455. 分发饼干 - 力扣(LeetCode)

注:下述题目描述和示例均来自力扣

题目描述

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

        对每个孩子 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.

解法一:排序+暴力

我就喜欢暴力,能暴力暴出来的题目我绝对不搞其他的兄弟们

package src;import java.util.Arrays;
import java.util.Scanner;public class text {public int findContentChildren(int[] g, int[] s) {// 若s >= g 那么就可以满足这个孩子int child = 0;// g 1 2 3// s -1 1// 给这两个数组排排序Arrays.sort(g);Arrays.sort(s);// 遍历搜索满足一个小朋友最小的那个饼干for (int i = 0; i < g.length; i++) {for (int j = 0; j < s.length; j++) {if (s[j] >= g[i]) {s[j] = -1;// 找到了,小朋友+1,并且结束循环提升性能child++;break;}}}return child;}
}

虽然慢,但是你就说省内存不!!!你就说过了不!!!

解法二:贪心

思路

        如果我们的目的是尽可能多的让更多的孩子得到满足,那么就不要效仿“田忌赛马”,既然大尺寸的无论是胃口大的还是胃口小的都可以满足他们,那么我们就不要浪费,尽可能给胃口大的。

        那么我们就可以使用贪心算法了,先将饼干大小和孩子胃口进行排序,然后先将饼干小的给胃口小的。

代码实现

        代码里也有一些难点的注解

class Solution {public int findContentChildren(int[] g, int[] s) {// 给这两个数组排排序Arrays.sort(g);Arrays.sort(s);int glen = g.length;// 定义一个索引用于指向孩子的胃口数组int index = 0;for (int i = 0; i < s.length; i++) {// 若果index没有到尽头并且满足孩子的胃口那么index++// 如果这里不满足就会下一次循环切换一个更大的饼干来满足if ( index < glen && g[index] <= s[i] ) {index++;}}return index;}
}

easy

古有“忠孝不能两全”,今有速度内存不可兼得

总结

与此同时,我仍然不理解

这群非人类是如何做到更优化的算法的,我认为这已经是最快的了。shift!!!!

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

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

相关文章

什么算法可以进行小语种的OCR?

对于小语种的OCR识别&#xff0c;可以采用以下算法和技术&#xff1a; 1. 迁移学习&#xff08;Transfer Learning&#xff09;&#xff1a;使用在大语种上预训练好的OCR模型&#xff0c;并通过迁移学习的方式对小语种进行微调。这样可以利用大语种上已有的丰富数据和知识&…

HAL STM32G4 +ADC手动触发采集+各种滤波算法实现

HAL STM32G4 ADC手动触发采集各种滤波算法实现 &#x1f4cd;相关篇《HAL STM32G4 TIM1 3路PWM互补输出VOFA波形演示》 ✨本篇内容也是继欧拉电子相关无刷电机驱动控制学习的相关基础内容。仅作为个人笔记记录使用。 &#x1f4cd;感谢网友提供的相关内容《基于STM32的ADC采样及…

刚刚,百度和苹果宣布联名

百度 Apple 就在刚刚&#xff0c;财联社报道&#xff0c;百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。 苹果曾与阿里以及另外一家国产大模型公司进行过洽谈&#xff0c;最后确定由百度提供这项服务&#xff0c;苹果预计采取 API 接口的方式计费。 苹果将…

Facebook防封如何做?附解禁方法

Facebook作为跨境主要业务平台&#xff0c;一直以来封号率都非常高。相信点进来的各位或多或少地遇见了个人号被封&#xff0c;广告账户被禁&#xff0c;FB主页被封等情况。针对此类问题&#xff0c;今天就小编也来分享自己的Facebook防封经验。 一、Facebook被封原因 主要有以…

龙膜全新推出膜力行“一站式汽车膜全面解决方案”

中国&#xff0c;深圳&#xff0c;2024年3月&#xff0c;全球特种材料公司伊士曼携旗下汽车膜品牌亮相24届九州汽车生态博览会&#xff0c;重磅发布了创新型汽车膜销售服务和售后的一站式解决方案——龙膜膜力行&#xff0c;进一步推动与4S集团、单店的深度合作。这一合作不仅为…

亚马逊云科技《生成式 AI 精英速成计划》

最近亚马逊云科技推出了「生成式AI精英速成计划」&#xff0c;获取包含&#xff1a;免费学习热门生成式AI课程、技能证书、人力主管的面试辅导、云计算国际认证、免费去往北美参加全球用户大会等&#xff5e; 针对开发者和企业非技术专业人士&#xff0c;了解如何使用大模型平台…