【LeetCode】135. Candy 解题记录
问题描述
There are n children standing in a line. Each child is assigned a rating value given in the integer array ratings.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
Return the minimum number of candies you need to have to distribute the candies to the children.
测试样例
1 | Input: ratings = [1,0,2] |
1 | Input: ratings = [1,2,2] |
说明
1 | n == ratings.length |
解题
思路
只需要简单的两次遍历即可:
-
把所有孩子的糖果数初始化为 1;
-
先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1;
-
再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1。
通过这两次遍历,分配的糖果就可以满足题目要求了。
这里的贪心策略即为,在每次遍历中,只考虑并更新相邻一侧的大小关系。
补充:
- 贪心算法
- 数组默认值填充方法
Arrays.fill(array, value)
- 数组求和方法
IntStream.of(array).sum()
- 时间复杂度
O(n)
代码
1 | import java.util.Arrays; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哆啦 C 梦!
评论