其他分享
首页 > 其他分享> > LeetCode 0135 Candy

LeetCode 0135 Candy

作者:互联网

原题传送门

1. 题目描述

2. Solution 1

1、思路分析
可以将“Children with a higher rating get more candies than their neigbors”(相邻的孩子中,评分高的孩子必须获得更多的糖果)拆分为两个原则,分别处理。左规则: 当ratings[i-1] < ratings[i]时,i号学生的糖果数量将比i-1号孩子的糖果数量多。右规则: 当ratings[i] > ratings[i+1]时,i号学生的糖果数量将比i+1号孩子的糖果数量多。
遍历该数组两次,处理出每一个学生分别满足左规则或右规则时,最少需要被分得的糖果数量。每个人最终分得的糖果数量即为这两个数量的最大值。

2、代码实现

package Q0199.Q0135Candy;

import java.util.Arrays;

public class Solution {
    public int candy(int[] ratings) {
        int n = ratings.length;
        int[] res = new int[n];
        Arrays.fill(res, 1);
        for (int i = 1; i < n; i++) {
            if (ratings[i] > ratings[i - 1])
                res[i] = res[i - 1] + 1;
        }

        for (int i = n - 1; i > 0; i--) {
            if (ratings[i - 1] > ratings[i])
                res[i - 1] = Math.max(res[i] + 1, res[i - 1]);
        }

        int sum = 0;
        for (int r : res) sum += r;

        return sum;
    }
}

3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(n)

标签:0135,ratings,int,res,复杂度,Candy,数量,糖果,LeetCode
来源: https://www.cnblogs.com/junstat/p/16294357.html