当前位置: 首页 > news >正文

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`变量的值,即所有孩子所需的最少糖果总数。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python如何与前端交互
  • Qt之元对象系统
  • 计算机课程名,汇总
  • Windows系统网络配置命令详细指南
  • 编程题目积累(day5)
  • CSS技巧专栏:一日一例 2.纯CSS实现 多彩边框按钮特效
  • 296个地级市GDP相关数据(2000-2023年)
  • 右键连点器
  • 支持向量机 (support vector machine,SVM)
  • UML建模案例分析-类图中的关系
  • 大模型/NLP/算法面试题总结2——transformer流程//多头//clip//对比学习//对比学习损失函数
  • stm32使用双通道ADC读取
  • 2024辽宁省数学建模B题【钢铁产品质量优化】思路详解
  • TCP网络传输控制协议
  • 在 WebSocket 连接建立之前进行身份验证时,token 应该如何存储
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 4个实用的微服务测试策略
  • es6要点
  • flask接收请求并推入栈
  • git 常用命令
  • JavaScript HTML DOM
  • Javascript设计模式学习之Observer(观察者)模式
  • Java应用性能调优
  • Joomla 2.x, 3.x useful code cheatsheet
  • Laravel Telescope:优雅的应用调试工具
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SQLServer之创建数据库快照
  • Unix命令
  • WebSocket使用
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 驱动程序原理
  • 如何利用MongoDB打造TOP榜小程序
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通过几道题目学习二叉搜索树
  • 我是如何设计 Upload 上传组件的
  • 怎样选择前端框架
  • # Kafka_深入探秘者(2):kafka 生产者
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • ()、[]、{}、(())、[[]]命令替换
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (二)fiber的基本认识
  • (十三)Flink SQL
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (五)Python 垃圾回收机制
  • (译) 函数式 JS #1:简介
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Windows2003安全设置/维护
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET Core Web APi类库如何内嵌运行?
  • .net core控制台应用程序初识