• (Java) LeetCode 135. Candy —— 分发糖果


    There are N children standing in a line. Each child is assigned a rating value.

    You are giving candies to these children subjected to the following requirements:

    • Each child must have at least one candy.
    • Children with a higher rating get more candies than their neighbors.

    What is the minimum candies you must give?

    Example 1:

    Input: [1,0,2]
    Output: 5
    Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies respectively.

    Example 2:

    Input: [1,2,2]
    Output: 4
    Explanation: You can allocate to the first, second and third child with 1, 2, 1 candies respectively.
                 The third child gets 1 candy because it satisfies the above two conditions.
    

    不知道如何分析这个题,很自然的思路就是先假设一个结果数组存着每个孩子要拿的糖数,初始都为1。那么先从前往后遍历ratings数组,逐个比较每一项和其前面的“邻居”。如果遍历到的孩子评分比前面高,那么他的糖数就设置为前邻居糖数+1。遍历完之后还要反着再看一遍后邻居,如果比后邻居评分高,且糖数还不如后邻居多,那么就要设置成后邻居糖数+1。本质上就是先遍历一次,分别保证评分满足和左边的邻居比,之后再遍历一次,保证评分满足和右边的邻居比。最后把每个人手里糖数加起来就是结果。


    Java

    class Solution {
        public int candy(int[] ratings) {
            int len = ratings.length;
            int[] res = new int[len];
            for (int i = 0; i < len; i++)
                res[i] = 1;
            for (int i = 1; i < len; i++) 
                 if (ratings[i-1] < ratings[i] ) 
                    res[i] = res[i-1] + 1;
            for (int i = len - 2; i >= 0; i--) 
                if (ratings[i] > ratings[i+1] && res[i] <= res[i+1])
                    res[i] = res[i+1] + 1;
            int sum = 0;
            for (int num : res)
                sum += num;
            return sum;
        }
    }
  • 相关阅读:
    Integer类的parseInt和valueOf的区别
    华为实习小结
    程序员浪费生命的几种方式
    移动前端中viewport(视口) 转
    Console API 与命令行
    Ajax
    浏览器缓存机制
    mysql之各种命令总结
    jquery file upload 文件上传插件
    文件上传插件uploadify详解
  • 原文地址:https://www.cnblogs.com/tengdai/p/9433809.html
Copyright © 2020-2023  润新知