原题: 有N个小朋友站在一排,每个小朋友都有一个评分 你现在要按以下的规则给孩子们分糖果: 每个小朋友至少要分得一颗糖果 分数高的小朋友要他比旁边得分低的小朋友分得的糖果多 你最少要分发多少颗糖果?

示例:

[1,2,2]
4

[2,4,2]
4

[5,3,1]
6

注释详解:

import java.util.*;


public class Solution {
    /**
     * 
     * @param ratings int整型一维数组 
     * @return int整型
     */
    public static int candy(int[] ratings) {
        // write code here
        // 记录每人手中糖果数量
        int[] counts = new int[ratings.length];
        counts[0] = 1;
        // 从左到右遍历
        for (int j = 1; j < ratings.length; j++) {
            // 如果当前数大于左侧前一位
            if (ratings[j] > ratings[j - 1]) {
                // 当前数分到的糖果比前一位多一个
                counts[j] = counts[j - 1] + 1;
            } else {
                // 保底一个
                counts[j] = 1;
            }
        }

        // 从右到左遍历
        for (int i = ratings.length - 2; i >= 0; i--) {
            // 如果当前数大于右侧前一位
            if (ratings[i] > ratings[i + 1]) {
                // 取当前数右侧一位的糖果数+1与当前数之前记录的糖果数比较,最大的一个当作当前数的糖果数
                counts[i] = Math.max(counts[i], counts[i + 1] + 1);
            }
        }
        
        int result = 0;
        for (int n : counts) {
            result += n;
        }

        return result;
    }