LeetCode——分发糖果

Q:有N个小朋友站在一排,每个小朋友都有一个评分,你现在要按以下的规则给孩子们分糖果:每个小朋友至少要分得一颗糖果,分数高的小朋友要他比旁边得分低的小朋友分得的糖果多。你最少要分发多少颗糖果?
A:
先从左往右遍历,如果比左边大加一;再从右往左遍历,如果比右边大,选择当前值和右边值+1中大的那个。

    public static int candy(int[] ratings) {
        if (ratings.length == 0)
            return 0;
        int[] candy = new int[ratings.length];
        int sum = 0;
        Arrays.fill(candy, 1);
        for (int i = 1; i < ratings.length; i++) {
            if (ratings[i] > ratings[i - 1])
                candy[i] = candy[i - 1] + 1;
        }
        sum += candy[ratings.length - 1];
        for (int i = ratings.length - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1])
                candy[i] = Integer.max(candy[i], candy[i + 1] + 1);
            sum += candy[i];
        }
        return sum;
    }
原文地址:https://www.cnblogs.com/xym4869/p/12462914.html