218.贪心算法:分发糖果(力扣)

核心思想

  1. 初始化每个学生的糖果数为1
    • 确保每个学生至少有一颗糖果。
  2. 从左到右遍历
    • 如果当前学生的评分高于前一个学生,则当前学生的糖果数应比前一个学生多一颗。
  3. 从右到左遍历
    • 如果当前学生的评分高于后一个学生,则当前学生的糖果数应比后一个学生多一颗。
    • 同时确保当前学生的糖果数不小于先前分配的糖果数(在从左到右遍历时确定的)。
  4. 计算糖果总数
    • 累加每个学生的糖果数,得到最终的总数。

代码解决

class Solution {
public:int candy(vector<int>& ratings) {int result = 0;vector<int> candyNum(ratings.size(), 1); // 初始化每个学生的糖果数为1// 从左到右遍历,确保评分高的学生比前一个学生得到更多的糖果for (int i = 1; i < ratings.size(); i++){if (ratings[i] > ratings[i - 1]){candyNum[i] = candyNum[i - 1] + 1;}}// 从右到左遍历,确保评分高的学生比后一个学生得到更多的糖果for (int i = ratings.size() - 2; i >= 0; i--){if (ratings[i] > ratings[i + 1]){candyNum[i] = max(candyNum[i + 1] + 1, candyNum[i]);}}// 计算糖果总数for (int num : candyNum){result += num;}return result;}
};

这段代码是一个名为`Solution`的类中的一个成员函数,其功能是计算一个整数数组`ratings`中的孩子根据他们的评分需要分配的最少糖果数量。具体处理方式如下:

1. 函数声明为`int candy(vector<int>& ratings)`,表示该函数接受一个整数向量`ratings`作为参数,并返回一个整数值。

2. `int result=0;`初始化一个名为`result`的整数变量,用于存储最终的结果,即所有孩子所需的最少糖果总数。

3. `vector<int> candyNum(ratings.size(),1);`创建一个名为`candyNum`的整数向量,其大小与`ratings`相同,并将所有元素初始化为1。这个向量用于存储每个孩子分配到的糖果数量。

4. 第一个for循环`for(int i=1;i<ratings.size();i++)`从索引1开始遍历`ratings`数组,直到数组末尾。在这个循环中,如果当前孩子的评分比他前一个孩子的评分高(`ratings[i]>ratings[i-1]`),则当前孩子的糖果数应该比前一个孩子的糖果数多1(`candyNum[i]=candyNum[i-1]+1;`)。

5. 第二个for循环`for(int i=ratings.size()-2;i>=0;i--)`从数组倒数第二个元素开始向前遍历,直到数组开头。在这个循环中,如果当前孩子的评分比他后一个孩子的评分高(`ratings[i]>ratings[i+1]`),则当前孩子的糖果数应该是他后一个孩子的糖果数加1和他当前糖果数中的较大值(`candyNum[i]=max(candyNum[i+1]+1,candyNum[i]);`)。

6. 第三个for循环`for(int num:candyNum)`遍历`candyNum`向量中的每个元素,将它们累加到`result`变量中,从而计算出所有孩子所需的最少糖果总数。

7. 最后,函数返回`result`变量的值,即所有孩子所需的最少糖果总数。

总结来说,这个函数通过两次遍历和比较相邻孩子的评分来确定每个孩子应该分配到的最少糖果数,然后计算总和得到结果。这种算法确保了评分较高的孩子会得到更多的糖果,并且满足相邻孩子评分差异较大的孩子也会获得额外的糖果。

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

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

相关文章

Hadoop3:HDFS-通过配置黑白名单对集群进行扩缩容,并实现数据均衡(实用)

一、集群情况介绍 我的本地虚拟机&#xff0c;一共有三个节点&#xff0c;hadoop102、hadoop103、hadoop104 二、白名单 创建白名单文件whitelist&#xff0c;通过白名单的配置&#xff0c;只允许集群包含102和103两台机器可以存储数据&#xff0c;104无法存储数据。 需求 …

react学习——29react之useState使用

useState 是 React Hooks 中的一个重要函数&#xff0c;它用于在函数组件中添加状态。在类组件中&#xff0c;我们通常使用 this.state 和 this.setState 来管理组件的状态&#xff0c;而在函数组件中&#xff0c;我们可以使用 useState 来达到同样的目的。 1、导入 useState&…

C语言 判断素数

写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。 #include <stdio.h> #include <stdbool.h>// 判断是否为素数 bool is_prime(int num) {if (num < 1) return false;for (int i 2; i < num / 2; i) {if (num % i 0) return false;}retur…

修改留言板

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>备忘录</title><!-- <link rel"…

Netty Websocket SpringBoot Starter

netty websocket starter Quick Start Demo 项目 添加依赖 <!--添加源--> <repository><id>github</id><url>https://maven.pkg.github.com</url><snapshots><enabled>true</enabled></snapshots> </reposit…

SchedulerLock分布式定时任务锁

1.pom中引入依赖&#xff0c;这里使用redis作为锁 <dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.12.0</version></dependency><dependency><groupId…

根据脚手架archetype快速构建spring boot/cloud项目

1、找到archetype&#xff0c;并从私仓下载添加archetype到本地 点击IDEA的file&#xff0c;选择new project 选择maven项目&#xff0c;勾选create from archetype 填写archetype信息&#xff0c;&#xff08;repository填写私仓地址&#xff09; 2、选择自定义的脚手架arche…

关于正点原子的alpha开发板的启动函数(汇编,自己的认识)

我傻逼了&#xff0c;这里的注释还是不要用&#xff1b; 全部换成 /* */ 这里就分为两块&#xff0c;一部分是复位中断部分&#xff0c;第二部分就是IRQ部分&#xff08;中断部分最重要&#xff09; 我就围绕着两部分来展开我的认识 首先声明全局 .global_start 在 ARM 架…

数据分包:145字节版本

分包 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2023/08/04 14:35:21 // Design Name: // Module Name: dat_send_blocks_v // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revisi…

pdf工具

iLovePDF | 为PDF爱好者提供的PDF文件在线处理工具 https://www.ilovepdf.com/zh-cn 图片 pdf 合并成一个pdf也可以拆分

近期matlab学习笔记,学习是一个记录,反复的过程

近期matlab学习笔记&#xff0c;学习是一个记录&#xff0c;反复的过程 matlab的mlx文件在运行的时候&#xff0c;不需要在文件夹路径下&#xff0c;也能运行&#xff0c;但是需要调用子函数时&#xff0c;就需要在文件所在路径下运行 那就先运行子函数&#xff0c;把路径换过来…

Qt: 利用QSplitter将主窗口与Docker窗口初始宽度比例2:1

要实现主窗口和 QDockWidget 之间的比例为 2:1&#xff0c;您可以使用 QSplitter 来创建一个可以调整大小的分隔窗口&#xff0c;其中一个区域放置主窗口的内容&#xff0c;另一个区域放置 QDockWidget。以下是一个示例代码&#xff0c;演示了如何实现主窗口和 QDockWidget 之间…

Power BI 工具介绍

Power BI是一款商业智能&#xff08;BI&#xff09;软件&#xff0c;由微软开发&#xff0c;旨在帮助用户将复杂的数据转化为视觉化的交互式见解。Power BI提供了一套完整的工具&#xff0c;包括数据连接、数据准备、数据建模、数据分析和数据可视化等功能&#xff0c;使用户能…

YOLOv10: Real-Time End-to-End Object Detection

双重标签分配 与一对一多分配不同&#xff0c;一对一匹配只为每个地面真相分配一个预测&#xff0c;避免了NMS后处理。然而&#xff0c;这导致了较弱的监督&#xff0c;导致次优的准确性和收敛速度。幸运的是&#xff0c;这种缺陷可以通过一对一多分配来弥补。为此&#xff0c…

Docker 安装 PostgreSQL

1. 启动 PostgreSQL 容器 docker run --name ffj-postgres -p 5432:5432 -e POSTGRES_PASSWORDCisc0123 -d postgres docker run&#xff1a;启动一个新的容器。--name指定容器名称为 ffj-postgres。-p 5432:5432&#xff1a;将主机的 5432 端口映射到容器的 5432 端口。-e P…

智能运维提升企业长期安全防御能力

随着企业数智化转型加速&#xff0c;企业在享受技术革新带来的效率提升与业务模式创新的同时&#xff0c;也面临着日益复杂且多变的网络安全威胁。 2024年&#xff0c;全球网络环境进一步演变&#xff0c;高级持续性威胁&#xff08;APT&#xff09;、勒索软件攻击、数据泄露以…

sqlalchemy反射视图

sqlalchemy反射视图 一个名为my_view的视图,使用SQLAlchemy来操作这个视图 from sqlalchemy import create_engine, MetaData# 创建数据库连接 engine = create_engine(数据库连接字符串)# 创建一个MetaData对象 metadata = MetaData()# 反射视图 metadata.reflect(bind=eng…

解决npm install 安装报错记录贴

前言 环境背景 nodeJS v.14.8.3(nvm安装) package.json: “node-sass”:“8.0.0” 网络环境&#xff1a; 公司内网 镜像地址&#xff1a;公司的镜像源 解决报错过程&#xff1a; 1.换了最新版 vscode&#xff0c; 然后重装 node_modules 还是不行&#xff0c; 报PostCSS rec…

性能优化--- iframe阻塞页面渲染的问题,如何优化?

问题描述&#xff1a; iframe 阻塞问题会阻塞页面的加载&#xff0c;因为 iframe 中的内容需要在父页面加载完成后才能被加载和渲染。这意味着在 iframe 内容完全加载和渲染之前&#xff0c;用户无法看到页面的其他部分。这种行为不仅降低了用户体验&#xff0c;因为用户会看到…

Redis的配置优化、数据类型、消息队列

文章目录 一、Redis的配置优化redis主要配置项CONFIG 动态修改配置慢查询持久化RDB模式AOF模式 Redis多实例Redis命令相关 二、Redis数据类型字符串string列表list集合 set有序集合sorted set哈希hash 三、消息队列生产者消费者模式发布者订阅者模式 一、Redis的配置优化 redi…