返回

LeetCode 135. 分发糖果:乐享甜蜜,公平分配

前端

糖果王国里,有一位备受欢迎的老师,他正在为孩子们分发糖果。为了确保公平分配,他需要遵循一些规则:

  • 每个孩子至少获得一颗糖果。
  • 评分高的孩子必须获得比相邻孩子更多的糖果。

聪明的你,该如何解决这个甜蜜的难题,让所有孩子都乐享其中?

我们使用动态规划算法,来解决这个问题:

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;
    }
}

现在,让我们一起探索糖果王国的甜美之旅吧!

  1. 公平分配,甜蜜开始

老师首先确认每个人至少获得一颗糖果,就像童话故事里的仙女,公平对待每一个孩子。

  1. 根据评分,调整糖果

接下来,老师开始根据孩子的评分来调整糖果数量。如果一个孩子的评分比相邻孩子高,那么他将获得更多的糖果。就好像孩子们在比赛,表现更好的人自然会得到更多的奖励。

  1. 动态规划,巧妙分配

为了解决这个问题,我们采用了动态规划算法。动态规划是一种解决复杂问题的有效方法,它将问题分解成更小的子问题,然后逐一解决,最终得到问题的整体解。在糖果分配的问题中,我们从左到右遍历一遍,从右到左遍历一遍,巧妙地解决了这个问题。

  1. 甜蜜收尾,皆大欢喜

通过动态规划的巧妙分配,老师最终让每一个孩子都获得了糖果。孩子们开心地品尝着美味的糖果,老师也露出了欣慰的笑容。在这个甜蜜的世界里,每个人都获得了公平的对待,每个人都获得了属于自己的甜蜜。

在糖果王国里,公平分配是幸福的根源,而动态规划则是实现公平分配的智慧之光。这是一个有趣而甜蜜的算法问题,希望你也能从中获得启发,享受算法带来的乐趣!