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.rhkb.cn/news/438829.html

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

相关文章

【51单片机】点亮LED之经典流水灯

开发环境 开发板&#xff1a;普中51-单核-A2单片机&#xff1a;STC89C52RC&#xff08;双列直插40引脚 DIP40&#xff09;Keil uVision5 v9.61 最新版破解方法自行百度&#xff0c;相关文档和视频资料很多&#xff0c;我自己将这一操作记录下来当做博客发布&#xff0c;CSDN以…

Pikachu-Unsafe FileUpload-客户端check

上传图片&#xff0c;点击查看页面的源码&#xff0c; 可以看到页面的文件名校验是放在前端的&#xff1b;而且也没有发起网络请求&#xff1b; 所以&#xff0c;可以通过直接修改前端代码&#xff0c;删除 checkFileExt(this.value) 这部分&#xff1b; 又或者先把文件名改成…

职业技术学校开设无人机培训技术详解

职业技术学校开设无人机培训技术&#xff0c;是一个涉及多个方面的综合性教学过程。以下是对该培训技术的详细解析&#xff1a; 一、培训目标 无人机培训技术的目标在于培养学员掌握无人机的基本原理、组装调试、飞行操作、安全规范及维修保养等技能&#xff0c;使其成为具备…

【Android】中级控件

其他布局 相对布局RelativeLayout RelativeLayout下级视图的位置是相对位置&#xff0c;得有具体的参照物才能确定最终位置。如果不设定下级视图的参照物&#xff0c;那么下级视图默认显示在RelativeLayout内部的左上角。用于确定视图位置的参照物分两种&#xff0c;一种是与…

Linux环境基础开发工具使用(2)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux环境基础开发工具使用(2) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. Li…

Qt Quick 3D 入门:QML 3D场景详解

随着 Qt 6 的发布&#xff0c;QtQuick3D 模块带来了新的 3D 渲染和交互能力&#xff0c;使得在 Qt 中创建 3D 场景变得更加简单和直观。本文将带您从一个简单的 QML 3D 应用开始&#xff0c;详细讲解各个相关领域的概念、代码实现以及功能特点。 什么是 Qt Quick 3D&#xff1…

git维护【.gitignore文件】

在工程下添加 .gitignore 文件【git忽略文件】 *.class .idea *.iml *.jar /*/target/

订阅ROS2中相机的相关话题并保存RGB、深度和点云图

系统&#xff1a;Ubuntu22.04 ROS2版本&#xff1a;ROS2 humble 1.订阅ROS2中相机的相关话题并保存RGB图、深度图和点云图 ros2 topic list/stellar_1/rgb/image_raw /camera/depth/image_raw /stellar_1/points2CMakeLists.txt cmake_minimum_required(VERSION 3.15) projec…

Docker安装人大金仓(kingbase)关系型数据库教程

人大金仓数据库(KingbaseES)是由中国人民大学金仓公司研发的一款自主知识产权的关系型数据库管理系统。 官网地址:https://www.kingbase.com.cn/ 本章教程,主要介绍如何用Docker安装启动人大金仓(kingbase)关系型数据库。 一、下载镜像 下载地址:https://www.kingbase.c…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)

4 创建docker容器 4.1创建网络 [rootlocalhost wutool]# docker network create -d macvlan --subnet192.168.137.0/24 --gateway192.168.137.2 --ip-range192.168.137.0/24 -o parentens33 nat 52af11381bfd655d175e4168265b2a507793e8fe48f119db846949ffd4dd27de [rootlocal…

​IAR全面支持国科环宇AS32X系列RISC-V车规MCU

全球领先的嵌入式系统开发软件解决方案供应商IAR与北京国科环宇科技股份有限公司&#xff08;以下简称”国科环宇”&#xff09;联合宣布&#xff0c;最新版本IAR Embedded Workbench for RISC-V将全面支持国科环宇AS32X系列RISC-V MCU&#xff0c;双方将共同助力中国汽车行业开…

文件上传之%00截断(00截断)以及pikachu靶场

pikachu的文件上传和upload-lab的文件上传 目录 mime type类型 getimagesize 第12关%00截断&#xff0c; 第13关0x00截断 差不多了&#xff0c;今天先学文件上传白名单&#xff0c;在网上看了资料&#xff0c;差不多看懂了&#xff0c;但是还有几个地方需要实验一下&#…

自然语言处理问答系统技术

自然语言处理问答系统技术 随着人工智能的不断发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术已成为推动智能问答系统发展的核心技术。问答系统是利用NLP来解析用户提出的问题&#xff0c;并从知识库中找到最相关的答案。在许多应用中&#xff0c;如智能客服、…

使用python基于DeepLabv3实现对图片进行语义分割

DeepLabv3 介绍 DeepLabv3 是一种先进的语义分割模型&#xff0c;由 Google Research 团队提出。它在 DeepLab 系列模型的基础上进行了改进&#xff0c;旨在提高图像中像素级分类的准确性。以下是 DeepLabv3 的详细介绍&#xff1a; 概述DeepLabv3 是 DeepLab 系列中的第三代…

开启AI新篇章:探索GPT-4与大模型!订阅方案!简单支付!

开启AI新篇章&#xff1a;探索GPT-4的无限可能 随着人工智能技术的飞速发展&#xff0c;我们正处于一个前所未有的变革时代。作为人工智能领域的领导者&#xff0c;OpenAI 推出的GPT-4&#xff0c;以其卓越的自然语言处理能力和强大的计算潜力&#xff0c;引发了行业内外的广泛…

【Android 14源码分析】WMS-窗口显示-流程概览与应用端流程分析

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

创建Vue项目的时出现:无法加载文件 E:\software\node\node_global\vue.ps1,因为在此系统上禁止运行脚本

创建Vue项目的时出现的问题:出现&#xff1a;无法加载文件 E:\software\node\node_global\vue.ps1&#xff0c;因为在此系统上禁止运行脚本 解决方法&#xff1a; .PowerShelll的执行政策阻止了该操作,用 get-ExecutionPolicy 查看执行策略的状态为受限 输入Set-ExecutionPo…

【STM32开发之寄存器版】(二)-USART

一、前言 串口作为STM32的重要外设&#xff0c;对程序调试具有不可替代的作用。通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。其主要具备以下特性&am…

CSP-J模拟赛四补题报告

前言 T1: 100 p t s \color{green}100pts 100pts T2: 100 p t s \color{green}100pts 100pts T3: 20 p t s → 5 p t s \color{red}20pts\rightarrow5pts 20pts→5pts T4: 20 p t s \color{red}20pts 20pts T1,2秒了&#xff0c;T3&#xff0c;4死了 T1 三个(three) 题面…

数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall

数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall 数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall 数据量&#xff1a;3k 想要进一步了解&#xff0c;请联系。 DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种…