返回
LeetCode 135. 分发糖果:乐享甜蜜,公平分配
前端
2023-12-07 02:36:04
糖果王国里,有一位备受欢迎的老师,他正在为孩子们分发糖果。为了确保公平分配,他需要遵循一些规则:
- 每个孩子至少获得一颗糖果。
- 评分高的孩子必须获得比相邻孩子更多的糖果。
聪明的你,该如何解决这个甜蜜的难题,让所有孩子都乐享其中?
我们使用动态规划算法,来解决这个问题:
class Solution {
public int candy(int[] ratings) {
int[] candies = new int[ratings.length];
Arrays.fill(candies, 1);
// 从左到右遍历
for (int i = 1; i < ratings.length; i++) {
if (ratings[i] > ratings[i - 1]) {
candies[i] = candies[i - 1] + 1;
}
}
// 从右到左遍历
for (int i = ratings.length - 2; i >= 0; i--) {
if (ratings[i] > ratings[i + 1]) {
candies[i] = Math.max(candies[i], candies[i + 1] + 1);
}
}
int sum = 0;
for (int candy : candies) {
sum += candy;
}
return sum;
}
}
现在,让我们一起探索糖果王国的甜美之旅吧!
- 公平分配,甜蜜开始
老师首先确认每个人至少获得一颗糖果,就像童话故事里的仙女,公平对待每一个孩子。
- 根据评分,调整糖果
接下来,老师开始根据孩子的评分来调整糖果数量。如果一个孩子的评分比相邻孩子高,那么他将获得更多的糖果。就好像孩子们在比赛,表现更好的人自然会得到更多的奖励。
- 动态规划,巧妙分配
为了解决这个问题,我们采用了动态规划算法。动态规划是一种解决复杂问题的有效方法,它将问题分解成更小的子问题,然后逐一解决,最终得到问题的整体解。在糖果分配的问题中,我们从左到右遍历一遍,从右到左遍历一遍,巧妙地解决了这个问题。
- 甜蜜收尾,皆大欢喜
通过动态规划的巧妙分配,老师最终让每一个孩子都获得了糖果。孩子们开心地品尝着美味的糖果,老师也露出了欣慰的笑容。在这个甜蜜的世界里,每个人都获得了公平的对待,每个人都获得了属于自己的甜蜜。
在糖果王国里,公平分配是幸福的根源,而动态规划则是实现公平分配的智慧之光。这是一个有趣而甜蜜的算法问题,希望你也能从中获得启发,享受算法带来的乐趣!