|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 shaowu459 于 2023-12-8 13:55 编辑
问题描述:
n(n为正整数) 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分,你需要按照以下要求,给这些孩子分发糖果
1)每个孩子至少分配到 1 个糖果。
2)相邻两个孩子评分更高的孩子会获得更多的糖果。
3)计算并返回需要准备的最少糖果数目 。
题目分析:
按照题目的分配原则,评分相同的孩子并不一定得到更多的糖果,每个孩子得到糖果的数量取决于这个孩子和其挨着的孩子评分比较结果。
假设孩子的评分数组是[1,3,2,2,1],则将按以下方式分配糖果:
1)每个孩子先获得一颗糖果,每个孩子分配的糖果初始数组[1,1,1,1,1]。
2)第一个孩子评分是1,比右侧孩子评分3低,所以第一个孩子仍保留一个糖果,糖果数组不变,仍为[1,1,1,1,1]。
3)第二个孩子评分是3,比左侧的1分和右侧的2分都高,所以这个孩子可以加一颗糖果(因为要准备最少得糖果),糖果数组变成[1,2,1,1,1]。
4)第三个孩子评分是2,比左侧的3低,并且也不比右侧的2高,因此,糖果数组保持不变,仍为[1,2,1,1,1]。
5)第四个孩子评分是2,不比左侧的2高,但是比右侧的1高,因此这个孩子多一个糖果,糖果数组变成[1,2,1,2,1]。
6)第五个孩子评分是1,比左侧的2低,所以糖果数组保持不变。
7)最后比较一下评分数组和糖果数组:
评分数组:[1,3,2,2,1]
糖果数组:[1,2,1,2,1]
相邻每一个评分高的孩子糖果数量都更高一些,满足了题目所有要求,所以[1,2,1,2,1]就是结果数组。
8)因为是从左到右遍历每个孩子得到的结果数组,所以遍历一遍后可能不满足题目要求,这时就需要从右侧再往左侧遍历一遍,规则相同。只要注意一点,当第n个孩子比第n+1个孩子评分高时,在第n+1个孩子糖果的数量基础上+1得到的结果如果比当前第n个孩子的糖果数量还小,就仍保持第n个孩子的糖果数量即可,也就是取MAX(第n个孩子已有糖果数量,第n+1个孩子糖果数量+1)的结果。
|
评分
-
4
查看全部评分
-
|