LeetCode第135题的要求是分发糖果,给孩子们分配糖果,满足条件是:每个孩子至少一个糖果,评分高的孩子比旁边的孩子多分糖果。以下是解题代码:
public class Solution {
public int candy(int[] ratings) {
// 获取孩子的数量
int n = ratings.length;
// 如果孩子数量为0,直接返回0
if (n == 0) return 0;
// 创建一个数组来保存每个孩子得到的糖果数量,初始值为1
int[] candies = new int[n];
for (int i = 0; i < n; i++) {
candies[i] = 1;
}
// 从左到右遍历,如果右边的孩子评分比左边高,右边的糖果数应比左边多1
for (int i = 1; i < n; i++) {
if (ratings[i] > ratings[i - 1]) {
candies[i] = candies[i - 1] + 1;
}
}
// 从右到左遍历,如果左边的孩子评分比右边高,左边的糖果数应比右边多1
// 同时确保不低于之前分配的糖果数量
for (int i = n - 2; i >= 0; i--) {
if (ratings[i] > ratings[i + 1]) {
candies[i] = Math.max(candies[i], candies[i + 1] + 1);
}
}
// 计算总糖果数
int totalCandies = 0;
for (int candy : candies) {
totalCandies += candy;
}
// 返回总糖果数
return totalCandies;
}
}
这个代码的核心思想是两次遍历:
- 左到右遍历:确保每个孩子比左边评分低的孩子至少多一个糖果。
- 右到左遍历:确保每个孩子比右边评分低的孩子至少多一个糖果,同时保持不低于第一次遍历的结果。
这样就能满足题目的条件并找到最小的糖果分配数量。
354

被折叠的 条评论
为什么被折叠?



