leetcode-135-分发糖果

2023-11-11

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

你需要按照以下要求,帮助老师给这些孩子分发糖果:

  • 每个孩子至少分配到 1 个糖果。

  • 相邻的孩子中,评分高的孩子必须获得更多的糖果。

那么这样下来,老师至少需要准备多少颗糖果呢?

示例 1:

输入: [1,0,2]
输出: 5
解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。

示例 2:

输入: [1,2,2]
输出: 4
解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。
第三个孩子只得到 1 颗糖果,这已满足上述两个条件。

分析

题目要求糖果的最少消耗值,怎么才能在满足上面要求的情况下最少的发放糖果呢?

我们可以秉持一个策略:

  1. 从评分最低的孩子开始发
  2. 尽可能地发满足条件的最小数量

按照这个策略,我们从给评分最低的孩子一个糖果,然后按照评分依次增加的顺序发放糖果,如果这个孩子周围有人评分比他低,则让他比那个低分的孩子多一个糖果,如果没有人比他低,则发放一个糖果(老资本家了)。按照这个方式便能得到最小数量。

首先我们需要在不破坏原有队形的情况下得到评分排名,这里我们可以引入一个聚合类stu(其中存有评分和在原有队形中的序号),然后对这个聚合类按评分升序的条件排序(sort+lambda表达式)。排序成功后再按上述的方法不断分配糖果,从而得到正确答案。

//先按分数排序,再从分数最低的学生开始分糖果
struct stu{
   
	int score;//分数
	int index;//序号
};
/*
执行结果:通过
执行用时:88 ms, 在所有 C++ 提交中击败了5.22%的用户
内存消耗:19.4 MB, 在所有 C++ 提交中击败了5.02%的用户
*/
int candy(vector<int>& ratings) {
   
	if (ratings.size() == 1) {
   
		return 1;
	}
	vector<stu> vs;
	for (int i = 0; i < ratings.size(); ++i) {
   
		vs.push_back({
    ratings[i], i });//放入保存有序号的vector中
	}
	//for (auto i : vs) {
   
	//	cout << i.score << "\t" << i.index << endl;
	//}
	auto sortFun = [](const stu& s1, stu& s2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode-135-分发糖果 的相关文章

  • 【Leetcode】662. 二叉树最大宽度

    题目描述 题解 还记得二叉树层序遍历https blog csdn net fisherish article details 115791079 还有二叉堆的概念 结点如果为 i 那么左子节点值为 i 2 右子节点值为 i 2 1 结合一
  • LeetCode:二叉树的修改与构造(5道经典题目)

    LeetCode 二叉树的修改与构造 5道经典题目 本文带来与二叉树的修改与构造有关的经典题目 主要实现是C 226 翻转二叉树 106 从中序与后序遍历序列构造二叉树 105 从前序与中序遍历序列构造二叉树 654 最大二叉树 617 合
  • torch.Size理解

    torch Size括号中有几个数字就是几维 第一层 最外层 中括号里面包含了两个中括号 以逗号进行分割 这就是 2 3 4 中的2 第二层中括号里面包含了三个中括号 以逗号进行分割 这就是 2 3 4 中的3 第三层中括号里面包含了四个数
  • LeetCode:动态规划中的股票问题【来和我一起用Python炒股吧~】

    股票问题是动态规划里面非常非常经典的问题了 本文列举了8道经典题目 都给出了详细的分析 可以发现这些题目的思路都是一致的 只是细节不同而已 赶快刷起来 quad PS 本文是参考代码随想录做的一些笔记 完整版本请戳链接 非常好的教程 121
  • 【Leetcode】44. 二叉树的前序遍历

    题目描述 题解 递归法 执行用时 0 ms 在所有 Java 提交中击败了100 00 的用户 内存消耗 36 7 MB 在所有 Java 提交中击败了38 60 的用户 Definition for a binary tree node
  • 【Leetcode】145. 二叉树的后序遍历

    题目描述 给定一个二叉树 返回它的 后序 遍历 题解 递归法 执行用时 0 ms 在所有 Java 提交中击败了100 00 的用户 内存消耗 36 8 MB 在所有 Java 提交中击败了29 78 的用户 Definition for
  • 【Leetcode】257. 二叉树的所有路径

    题目描述 题解 能用String解决的最好不要走StringBuilder 递归时注意空结点 null 回退和叶子结点判定回退 执行用时 9 ms 在所有 Java 提交中击败了30 66 的用户 内存消耗 39 1 MB 在所有 Java
  • 【Leetcode】1302. 层数最深叶子节点的和

    题目描述 题解 层序遍历是一定要的 而且是分层的层序遍历 也就是在层序遍历的过程中把 结点 val 加起来 但是要的是最后一层 我想不到要怎么判断遍历层最后一层 所以直接把每一层的 结点 val 加起来得到sum 到下一层的时候清空sum
  • Leetcode:链表刷题(7道经典题目)

    Leetcode 链表刷题 7道经典题目 本文带来的是以链表为主题的一些经典题目 203 移除链表元素 707 设计链表 206 反转链表 24 两两交换链表中的节点 19 删除链表的倒数第 N 个结点 面试题 02 07 链表相交 142
  • LRU 最近最少使用算法

    LRU 最近最少使用算法 设计LRU Cash 数据结构 设计方法 代码实现 总结 百度百科 LRU是Least Recently Used的缩写 即最近最少使用 是一种常用的页面置换算法 选择最近最久未使用的页面予以淘汰 该算法赋予每个页
  • leetcode-135-分发糖果

    老师想给孩子们分发糖果 有 N 个孩子站成了一条直线 老师会根据每个孩子的表现 预先给他们评分 你需要按照以下要求 帮助老师给这些孩子分发糖果 每个孩子至少分配到 1 个糖果 相邻的孩子中 评分高的孩子必须获得更多的糖果 那么这样下来 老师
  • LeetCode:动态规划中的0-1背包问题【快来直接套模板啦】

    PS 0 1背包问题无疑是动态规划题目里面的非常经典的一类题目了 下面给出这类题目的一种解题模板 本文是参考代码随想录做的一些笔记 完整版本请戳链接 标准0 1背包问题 二维数组求解 标准的背包问题 有n件物品和一个最多能背重量为w的背包
  • 【中等】【LeetCode刷题笔记(二十九)】之54.螺旋矩阵

    本文章由公号 开发小鸽 发布 欢迎关注 老规矩 妹妹镇楼 一 题目 一 题干 给定一个包含 m x n 个元素的矩阵 m 行 n 列 请按照顺时针螺旋顺序 返回矩阵中的所有元素 二 示例 示例 1 输入 1 2 3 4 5 6 7 8 9
  • 【DFS】1905. 统计子岛屿

    1905 统计子岛屿 解题思路 如果两个岛屿的点不一样 说明grid2这个岛屿一定不是子岛屿 然后淹没i j 以及相邻的土地 现在grid2 剩下的岛屿 全部都是子岛屿 计算岛屿的数量 dfs计算陆地数量 class Solution pu
  • LeetCode:二叉搜索树的属性、修改与构造(12道经典题目)

    LeetCode 二叉搜索树的属性 修改与构造 12道经典题目 本文带来与二叉搜索树的属性 修改与构造有关的经典题目 主要实现是C 700 二叉搜索树中的搜索 98 验证二叉搜索树 530 二叉搜索树的最小绝对差 501 二叉搜索树中的众数
  • 【Leetcode】154. 寻找旋转排序数组中的最小值 II

    题目描述 已知一个长度为 n 的数组 预先按照升序排列 经由 1 到 n 次 旋转 后 得到输入数组 例如 原数组 nums 0 1 4 4 5 6 7 在变化后可能得到 若旋转 4 次 则可以得到 4 5 6 7 0 1 4 若旋转 7
  • 【Leetcode】225. 用队列实现栈

    题目描述 请你仅使用两个队列实现一个后入先出 LIFO 的栈 并支持普通栈的全部四种操作 push top pop 和 empty 实现 MyStack 类 void push int x 将元素 x 压入栈顶 int pop 移除并返回栈
  • LeetCode:二叉树的遍历方式(13道经典题目)

    LeetCode 二叉树的遍历方式 13道经典题目 本文带来与二叉树的遍历方法有关的经典题目 主要实现是C 144 二叉树的前序遍历 94 二叉树的中序遍历 145 二叉树的后序遍历 102 二叉树的层序遍历 107 二叉树的层序遍历 II
  • 力扣 - 102、二叉树的层序遍历(剑指Offer - 面试题32:从上到下打印二叉树)

    题目 给你一个二叉树 请你返回其按 层序遍历 得到的节点值 即逐层地 从左到右访问所有节点 示例 二叉树 3 9 20 null null 15 7 3 9 20 15 7 输出层序遍历的结果 3 9 20 15 7 分析 迭代法 用一个队
  • 【Leetcode】151. 翻转字符串里的单词

    题目描述 给你一个字符串 s 逐个翻转字符串中的所有 单词 单词 是由非空格字符组成的字符串 s 中使用至少一个空格将字符串中的 单词 分隔开 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串 说明 输入字符串 s 可以在前面 后面

随机推荐

  • WMware创建linux虚拟机并配置网络及防火墙

    1 打开VMware并创建虚拟机 基本一直下一步就行了 这里不多做说明了 名称随便取 最好就是master 位置放在自己预定的地方 这些配置参数随便设 差不多就行 创建到此为止 接下来安装linux系统 上下键选择 回车键确定 为了表现专业
  • ERP服务器端安装及配置

    概述 在配置ERP端是 普实系统集成工具同MES端配置时使用的程序类似 不硬性规定在哪台服务器上安装 只要能够连上ERP服务器即可 安装过程类似于系统集成工具 安装完成后 在开始中的菜单文件夹为Pushsoft Intergration 操
  • 锤子剪刀布游戏

    问题描述 大家应该都会玩 锤子剪刀布 的游戏 两人同时给出手势 胜负规则如图所示 现给出两人的交锋记录 请统计双方的胜 平 负次数 并且给出双方分别出什么手势的胜算最大 输入 输入第1行给出正整数N lt 105 即双方交锋的次数 随后N行
  • RC4文件加密的Python实现方法

    RC4 Rivest Cipher 4 是一种流密码 stream cipher 算法 广泛应用于网络通信和数据加密中 本文将介绍如何使用Python实现RC4文件加密算法 RC4算法的核心是使用一个伪随机数生成器 PRNG 生成密钥流 然
  • 端口显示被占用,如何关闭端口

    用管理员权限打开命令提示符 如果要关闭3306端口 首先要查询此端口号对应的PID 则输入以下命令 1 输入 netstat ano findstr 3306 然后借助命令终止PID对应的进程 输入以下命令 2 输入 taskkill PI
  • 【C++简明教程】Python和C++指定元素排序比较

    Python 中的排序 在 Python 中 常用的排序就是 sorted 对于列表这种数据结构来说 还有 sort 方法 列表的排序 使用 sort 方法进行排序 以第二个值进行升序排序 列表的 sort 方法是原地排序 另外一种排序方法
  • CMake的使用--以ORCA避碰C++库为例

    1 安装cmake 链接 Download CMake 版本需下载Binary distributions这个模块下的 Windows x64 Installer cmake 3 27 1 windows x86 64 msi 注意事项 1
  • CentOS6.5 安装 抓包工具tcpdump

    1 裸机没装GCC 离线安装 首先到http vault centos org 6 5 os x86 64 Packages 下载用到的rpm包 包括 ppl 0 10 2 11 el6 x86 64 rpm cloog ppl 0 15
  • LabVIEW自带函数Database Toolkit实现SQL Server操作(上)

    目录 一 函数位置 二 函数一览 三 主要介绍 1 DB Tool Open Connection vi 2 DBTool Close Connection vi 3 Database Variant To Data vi 4 DBTool
  • 浅析Redux 的 store enhancer

    相信大家都知道Redux的middleware 中间件 的概念 Redux通过middleware可以完成发送异步action 网络请求 打印action的日志等功能 相对而言 Redux的store enhancer的概念 很多人并不是很
  • 【MLOps】第 5 章 : 生产准备

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 副本与ISR设计--Kafka从入门到精通(十四)

    上篇文章说了 broker的消息设计 采用紧凑的byteBuffer 存储设计主要包含attribute后三个表示压缩类型 还有crc效验 以及key和value 后面新增了时间戳 Broker消息设计 Kafka从入门到精通 十三 htt
  • js实现数学的排列组合

    js实现数学的排列组合 实现 组合 param arr 待选数组 param size 从数组里面要抽几个元素进行组合 function combination arr size 1 45 3 9 4 14 1 const r param
  • 如何二次封装Element-Plus table组件

    最近做了一个后台的项目 需要用到大量的表格组件 我就试着把它给封装了一下 记录一下 那么现在开始了 父页面代码
  • Linux_centos7_网络管理1_2

    测试网络连接状态 kingarthur localhost ping www google com PING www google com 174 37 175 229 56 84 bytes of data C www google co
  • nginx_upstream_check_module模块

    nginx upstream check module模块 一个更专业的模块 来专门提供负载均衡器内节点的健康检查的 这个就是淘宝技术团队开发的 nginx 模块nginx upstream check module 通过它可以用来检测后端
  • 静态链接和动态链接的区别

    在理解静态和动态 共享 库链接之间的区别之前 让我们先看一个典型程序的生命周期 从编写源代码到执行它 首先使用任何程序员选择的编辑器以文本文件的形式编写程序 然后必须对其进行编译以将文本文件转换为机器可以理解和执行的目标代码 通常我们编写的
  • 1216项目设计模板

    一 基本信息 目标上线时间 yyyy mm dd 项目人员 研发 测试 背景 二 功能需求 1 业务平台 1 业务的订购 配置默认的模板或者策略 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img I8vhSe47
  • 最全的Pandas 日期处理 超强总结!

    对于 Pandas 来说 可以处理众多的数据类型 其中最有趣和最重要的数据类型之一就是时间序列数据 时间序列数据无处不在 它在各个行业都有很多应用 患者健康指标 股票价格变化 天气记录 经济指标 服务器 网络 传感器和应用程序性能监控都是时
  • leetcode-135-分发糖果

    老师想给孩子们分发糖果 有 N 个孩子站成了一条直线 老师会根据每个孩子的表现 预先给他们评分 你需要按照以下要求 帮助老师给这些孩子分发糖果 每个孩子至少分配到 1 个糖果 相邻的孩子中 评分高的孩子必须获得更多的糖果 那么这样下来 老师