LeetCode-135-分发糖果
题目
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到
1
个糖果。 - 相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
示例 1:
1 | 输入:ratings = [1,0,2] |
示例 2:
1 | 输入:ratings = [1,2,2] |
提示:
n == ratings.length
1 <= n <= 2 * 104
0 <= ratings[i] <= 2 * 104
题解
我的思路解不出来,答案有问题,那么就说一下一个很巧妙的正确解法:
根据题目的要求,最后的糖果数组应该满足:
若学生A
与学生B
左右相邻,A
在B
左边:
-
左规则:当
ratings[B] > ratings[A]
时,B
的糖比A
多; -
右规则:当
ratings[A] > ratings[B]
时,A
的糖比B
多;
那么,我们先将每个人的糖果初始化为1,然后先对letf
数组应用左规则,当左边的比右边的分数高,就在右边的基础上多发一个;再对right
数组应用右规则,当右边的比左边的分数高,就在左边的基础上多发一个。然后选取每个位置的left
与right
最大值(同时满足左右规则),便是答案。
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Excelius's World!