135.分发糖果

1.问题拆分成两个简单的实现 O(N) O(N)

将「相邻的孩子中,评分高的孩子必须获得更多的糖果」这句话拆分为两个规则,分别处理。
左规则:当 ratings[i−1]<ratings[i] 时,i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。
右规则:当 ratings[i]>ratings[i+1] 时,i 号学生的糖果数量将比 i+1 号孩子的糖果数量多。

class Solution {
    public int candy(int[] ratings) {
        //从左侧和右侧分别扫描一遍,计算当前孩子是否是比两侧的孩子优秀
        int length = ratings.length;
        int[] candyNum = new int[length];
        for (int i = 0; i < length; i++){
            candyNum[i] = 1;
        }
        for (int i = 1; i < length; i++){
            if (ratings[i - 1] < ratings[i]){
                candyNum[i] = candyNum[i - 1] + 1;
            }
        }
        for (int i = length - 2; i >= 0; i--){
            if (ratings[i + 1] < ratings[i] && candyNum[i + 1] >= candyNum[i] ){
                candyNum[i] = candyNum[i + 1] + 1;
            }
        }
        int total = 0;
        for (int i = 0; i < length; i++){
            total += candyNum[i];
        }
        return total;
    }
}
posted @ 2024-02-08 17:49  破忒头头  阅读(12)  评论(0)    收藏  举报