leetcode135:分发糖果

步骤1:计算问题性质的定义

我们需要解决的题目是一个典型的贪心算法问题,要求分发糖果的数量,满足特定条件。以下是问题的详细定义:

  • 输入:

    • ratings:长度为 n 的数组,表示每个孩子的评分,1 <= n <= 2 * 10^4
    • 每个孩子的评分为 0 <= ratings[i] <= 2 * 10^4
  • 输出:

    • 返回满足题目条件的最少糖果数目。
  • 题目条件:

    • 每个孩子至少分得 1 颗糖果。
    • 如果孩子 i 的评分比相邻的孩子高(即 ratings[i] > ratings[i-1]ratings[i] > ratings[i+1]),那么 i 号孩子获得的糖果数量必须比相邻的孩子多。

边界条件:

  • n == 1 时,孩子只有一个,只需要 1 颗糖果。
  • 当所有孩子的评分相同,即 ratings[i] == ratings[j] 对于所有 i, j 时,每个孩子都只需要 1 颗糖果。

步骤2:问题分解与算法设计

这个问题的核心是如何在保证所有孩子至少 1 颗糖果的前提下,尽量减少糖果的分配总数,并满足评分高的孩子分配更多糖果的要求。

我们可以使用贪心算法来解决这个问题,分两轮处理:

  1. 从左到右遍历:
    • 从左向右遍历,如果孩子 i 的评分高于左边孩子 i-1 的评分(ratings[i] > ratings[i-1]),则 i 号孩子的糖果数量要比 i-1 号孩子的多。因此,将 i 号孩子的糖果数设置为 i-1 号孩子的糖果数 +1。
  2. 从右到左遍历:
    • 从右向左遍历,如果孩子 i 的评分高于右边孩子 i+1 的评分(ratings[i] > ratings[i+1]),且 i 号孩子的糖果数不满足比 i+1 号孩子多的要求,则需要更新 i 号孩子的糖果数为 i+1 号孩子的糖果数 +1。
  3. 最终结果:
    • 两轮遍历后,所有的孩子都能满足题目的糖果分配要求,最后计算糖果总数即可。

时间复杂度分析:

  • 时间复杂度:每个孩子会被遍历两次,因此时间复杂度为 O(n),其中 n 是孩子的数量。
  • 空间复杂度:我们需要一个数组存储每个孩子的糖果数,空间复杂度为 O(n)

步骤3:C++代码实现

代码说明:

  1. 初始化糖果数组 candies,每个孩子都至少分配 1 颗糖果。
  2. 第一轮遍历:从左到右,如果当前孩子的评分比左边孩子的评分高,则当前孩子的糖果数要比左边的孩子多。
  3. 第二轮遍历:从右到左,如果当前孩子的评分比右边孩子的评分高,则需要更新糖果数,保证它比右边的孩子多。
  4. 最后,将所有孩子的糖果数相加,得到最少需要的糖果数目。

步骤4:算法的优化与效率提升

通过这个问题的解决,我们可以看到贪心算法在局部最优解的策略下,能够快速找到全局最优解。该算法的时间复杂度为 O(n),适合处理大规模数据集。由于题目只要求相邻两个孩子进行比较,因此不需要使用复杂的数据结构,这也是贪心算法高效的原因之一。

在处理大规模数据时,贪心算法可以减少不必要的计算量,保证在合理的时间内完成任务。该方法可以轻松扩展到更复杂的评分系统,甚至可以处理多维的分配问题。

步骤5:实际应用场景分析

这种算法可用于资源分配问题,例如在企业中对员工的绩效评估和奖金分配。假设员工根据业绩获得奖金,且相邻团队成员的业绩有明确的比较规则,我们需要确保绩效高的员工获得更多的奖金,同时每个员工至少获得一份奖金。这与本题的糖果分配问题类似。

具体实现方法:

  1. 员工绩效数据作为输入。
  2. 根据相邻员工的绩效对比,使用贪心算法分配奖金。
  3. 保证高绩效员工获得更多奖金,最终计算出最少的总奖金数。

通过这种方式,企业可以公平地分配资源,提升员工满意度,并确保绩效较高者得到应有的奖励。

就是说这个例子蛮贴合实际的🥹

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

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

相关文章

畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)

畅阅读系统小程序 目录 基于java的畅阅读系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师…

51单片机的宠物自动投喂系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器DS1302时钟模块蓝牙步进电机按键、蜂鸣器等模块构成。适用于猫猫/狗狗宠物自动喂食器等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间和温湿度 2、温湿度传感器DHT11采集环境温湿度 3、时…

数据在内存中的存储【上】

一.整型在内存中的存储 在讲解操作符的时候&#xff0c;我们就讲过了下面的内容&#xff1a; 整数的2进制表示方法有三种&#xff0c;即 原码、反码和补码 有符号的整数&#xff0c;三种表示方法均有符号位和数值位两部分&#xff0c;符号位都是用0表示"正"&#xff…

数据结构——计数、桶、基数排序

目录 引言 计数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 桶排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 基数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 排序算法的稳定性 1.稳定性的概念 2.各个排序算法的稳定性 结束语 引…

在WPF中实现多语言切换的四种方式

在WPF中有多种方式可以实现多语言&#xff0c;这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…

IDEA 系列产品 下载

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-yVHnH 仅供参考 环境 演示环境&#xff1a; 操作系统&#xff1a;windows10 产品&#xff1a;IntelliJ IDEA 版本&#xff1a;2024.1.2 注意&#xff1a;如果需要其他产品或者版本可以自行下载&#xff0…

深入理解Dubbo源码核心原理-Part3

到此开始讲解Dubbo消费端的源码 在消费一端&#xff0c;需要关注两件事情。第一&#xff0c;接口的proxy如何生成。第二&#xff0c;请求如何发送。 首先看到启动类 接下来看真正inject方法 现在需要思考&#xff0c;待注入的Bean从哪儿来&#xff0c;这个Bean必然注入的是一…

(16)MATLAB仿真Nakagami-m分布1

文章目录 前言一、Nakagami分布二、MATLAB建模代码三、仿真结果画图四、总结 前言 Nakagami衰落模型最初是由于该模型与短波电离层传播的经验结果相匹配而提出的。它还用于仿真来自多个干扰源的情况&#xff0c;因为多个独立且同分布&#xff08;i.i.d&#xff09;的瑞利分布随…

Flask-3

文章目录 ORMFlask-SQLAlchemySQLAlchemy中的session对象数据库连接设置常用的SQLAlchemy字段类型常用的SQLAlchemy列约束选项 数据库基本操作模型类定义 数据表操作创建和删除表 数据操作基本查询SQLAlchemy常用的查询过滤器SQLAlchemy常用的查询结果方法多条件查询分页器聚合…

Ajax ( 是什么、URL、axios、HTTP、快速收集表单 )Day01

AJAX 一、Ajax是什么1.1名词解释1.1.1 服务器1.1.2 同步与异步1. 同步&#xff08;Synchronous&#xff09;2. 异步&#xff08;Asynchronous&#xff09;3. 异步 vs 同步 场景4. 异步在 Web 开发中的常见应用&#xff1a; 1.2 URL 统一资源定位符1.2.1 URL - 查询参数1.2.2 ax…

JavaSE——面向对象8:Object类详解(==与equals的区别、hashCode、toString方法)

目录 一、与equals()的区别 (一)是一个比较运算符 (二)equals是Object类中的方法&#xff0c;只能判断引用类型 (三)equals方法重写练习 1.练习1 2.练习2 3.练习3 二、hashCode方法 三、toString方法 1.默认返回&#xff1a;全类名(包名类名)哈希值的十六进制 (1)不…

unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题分析二、解决方法1. 添加项目设置碰撞检测通道2.玩家角色碰撞设置3.怪物角色碰撞预设 最终效果 前言 在使用unreal engine5制作动作类游戏时&#xff0c;我们使用刀剑等武器攻击怪物或敌方单位时&#xff0c;发现攻击特效…

基于Hive和Hadoop的用电量分析系统

本项目是一个基于大数据技术的用电量分析系统&#xff0c;旨在为用户提供全面的电力消耗信息和深入的用电量分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…

Python中流行的开源OCR项目

以下是一些Python中流行的开源OCR项目&#xff1a; PaddleOCR&#xff1a;由百度开发的OCR工具库&#xff0c;支持多种语言的文字识别&#xff0c;包括中英文&#xff0c;同时支持倾斜、竖排等多种方向的文字识别。它提供了超轻量级的PP-OCRv3模型&#xff0c;适合在资源受限的…

`git restore` 和 `git checkout` 用于丢弃工作区的改动, `git switch` 和 `git checkout` 用来切换分支

git restore 和 git checkout 都可以用于丢弃工作区的改动 但它们有一些区别&#xff0c;尤其是在 Git 2.23 引入了新的命令后。 主要区别 git checkout 是一个多用途命令&#xff1a; 它用于切换分支。它还可以用于恢复工作区中特定文件的更改。由于功能过于复杂&#xff0c…

Flutter 3.24 AAPT: error: resource android:attr/lStar not found.

在Android build,gradle下面&#xff0c;添加右边红框的代码&#xff1a; subprojects {afterEvaluate { project ->if (project.plugins.hasPlugin("com.android.application") ||project.plugins.hasPlugin("com.android.library")) {project.androi…

【MySQL】SQL介绍+基础+DDL+数据备份+还原

目录 一、DDL建库建表 1. 数据库 2. 内部4特征 3. 外部4特征 4. 数据库结构 5. SQL语句分类&#xff08;重点&#xff09; 6. 注意 7. 数据库表的字段类型 8. 存储引擎 9. 数据库表的操作 二、三范式 1. 什么是范式 2. 约束作用 3. 三范式 4. 第一范式&#xff…

【Android 14源码分析】Activity启动流程-2

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

Visual Studio C# 编写加密火星坐标转换

Visual Studio C# 编写加密火星坐标转换 1、WGS84坐标转GCJ02火星坐标2、GCJ02火星坐标转WGS84坐标&#xff08;回归计算&#xff09;3、GCJ02火星坐标转BD09百度坐标4、BD09百度坐标转GCJ02火星坐标&#xff08;回归计算&#xff09;5、坐标公共转换类6、地图显示7、程序简单界…

检查jar冲突,查找存在相同class的jar

写在前面 本文看下如何查找jar冲突&#xff0c;即查找哪些jar包中存在相同的class。如果是存在相同jar的不同版本&#xff0c;基本一眼就能看出来&#xff0c;然后结合maven的依赖关系将其剔除掉即可&#xff0c;但是当你遇到了有人手动拷贝某些class到jar包中导致冲突的情况时…