代码随想录训练营23day-贪心算法

server/2024/10/11 13:22:01/

一、算法>贪心算法

算法>贪心算法核心思想是局部最优,以确定全局最优。当然需要使用数学归纳去总结,但是实际应用过程,可以举反例来验证是不是可以使用算法>贪心算法。参考代码随想录

算法>贪心算法一般分为如下四步:

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

二、分发饼干

 根据算法>贪心算法思想,题目中明确指出g[i]代表孩子的最大胃口,s[i]代表饼干的尺寸,可以思考,最大的饼干分给最大胃口的孩子,胃口小的孩子用小尺寸的饼干,这样整体上,能满足最多的孩子。

//算法>贪心算法:局部最优,进而全局最优
void sort(int* arr, int size)
{for(int i = 0; i < size; i++){for(int j = i + 1; j < size; j++){if(arr[i] > arr[j]){int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}}
}int findContentChildren(int* g, int gSize, int* s, int sSize) {/**排序**/sort(g, gSize);sort(s, sSize);int result = 0;int s_idx = sSize - 1;//最大的饼干s[i], 给胃口最大的孩子g[j]for(int i = gSize - 1; i >= 0; i--){//g[i]的第一个是孩子的最大的胃口, s[s_idx]是最大尺寸的饼干if(s_idx >= 0 && g[i] <= s[s_idx]){  result++;s_idx--;}}return result;
}

还有一个思路:就是先给最小的胃口的孩子分最小尺寸的饼干,然后遍历,找到最多孩子数量。

三、摆动序列

算法>贪心算法思路:摆动意味着左右有波动,可以考虑峰值点个数,就能判断全局最长的序列。

代码随想录上面的记录比较重要的点:1 要注意平峰时候的情况,比如单调区间,突然一段有平峰;还有类似梯形,开始有峰,然后平峰,接着递减;2 注意只有2个的情况,比如[0 0]这样的就只有一个长度序列;

int wiggleMaxLength(int* nums, int numsSize){if(numsSize <= 1)//numssize = 2情况,例如[0, 0]在这里不行{return numsSize;}int pre = 0, cur = 0;int result = 1;for(int i = 1; i < numsSize; i++){cur = nums[i] - nums[i -1];if((pre <=0 && cur > 0) || (pre >=0 && cur < 0)){result++;pre = cur;}}return result;
}

四、最大子数组和

思路:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小 (负数加任何数都会越来越小)。

int maxSubArray(int* nums, int numsSize) {int result = INT_MIN;int sum = 0;if(numsSize == 0){return 0;}for(int i = 0; i < numsSize; i++){ sum += nums[i];if(sum > result){result = sum;}  if(sum <= 0)sum = 0;}return result;
}


http://www.ppmy.cn/server/9069.html

相关文章

python Django中分配库存给用户包括定义库存模型、用户模型、以及一个用于分配库存的逻辑

在Django中分配库存给用户通常涉及几个步骤&#xff0c;包括定义库存模型、用户模型、以及一个用于分配库存的逻辑。以下是一个基本的示例来说明如何执行这个过程&#xff1a; 1. 定义模型 首先&#xff0c;你需要定义两个模型&#xff1a;一个是User模型&#xff08;可以使用…

Lustre架构介绍的阅读笔记-SMB协议

本文是在阅读Introduction to Lustre* Architecture的Lustre SMB Gateway System Architecture时的笔记。 Lustre只支持Linux系统&#xff0c;但借助Samba可以支持SMB协议&#xff0c;进而对Windows主机提供文件访问能力。 参考资料 Welcome to the CTDB web pages CTDB is …

供应链投毒预警 | 开源供应链投毒202403月报发布啦!(含投毒案例分析)

悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库&#xff0c;结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获&#xff0c;能够第一时间捕获开源组件仓库中的恶意投毒攻击。在2024年3月份&#xff0c;悬镜供应链安全情报中心在NPM官方仓库&#xff0…

Ubuntu不能启动,如何解决??

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

管理 Python 项目的艺术:在 PyCharm 中使用虚拟环境(以BPnP为例)

在 PyCharm 中使用虚拟环境对于 Python 项目开发具有多方面的重要作用&#xff0c;这些作用体现在提升项目管理的效率、保障代码的可运行性以及维护项目的长期稳定性等方面。以下是使用虚拟环境的几个关键好处&#xff1a; 1. 依赖管理和隔离 虚拟环境允许每个项目拥有…

新加坡VPS服务器Linux系统的安全性如何增强

增强新加坡VPS服务器上Linux系统的安全性是至关重要的&#xff0c;以下是一些常见的方法和建议&#xff1a; 更新系统和软件&#xff1a; 定期更新操作系统和安装的软件包&#xff0c;确保系统中的所有组件都是最新版本&#xff0c;以修补已知的漏洞和安全问题。 配置防火墙&am…

.NET Core中间件管道MAP的作用和使用

在ASP.NET Core中&#xff0c;中间件是构建HTTP请求管道的基本组件。中间件组件负责在ASP.NET Core应用程序中处理请求和响应。中间件可以执行多种任务&#xff0c;例如身份验证、记录、异常处理等。你可以按顺序将多个中间件组件组合在一起&#xff0c;形成一个请求处理管道。…

情感视频素材怎么找?8个视频素材库免费网站推荐

在这个视频内容不断主导视觉传播的时代&#xff0c;获取高质量、创意无限的视频素材变得尤为重要。无论是商业广告、教育内容还是个人项目&#xff0c;下面这些视频素材网站能够为你的每一帧添加光彩&#xff0c;帮助你打造出观众难以忘怀的视觉体验。 1. 蛙学府&#xff08;中…