zoukankan      html  css  js  c++  java
  • LeetCode135-Candy

    老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

    你需要按照以下要求,帮助老师给这些孩子分发糖果:

    每个孩子至少分配到 1 个糖果。
    评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。
    那么这样下来,老师至少需要准备多少颗糖果呢?

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/candy
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    这道题采用贪心算法。首先假设每个孩子都只能领到一颗糖果,这样得到的肯定是最小值。然后从左往右遍历一遍,如果右边的孩子的评分比左边孩子的评分高,则把右边孩子的糖果数+1;

    再从右往左遍历一遍,如果左边孩子的评分比右边孩子的评分要高,同时左边孩子得到的糖果数不大于右边孩子的糖果数的话,则把左边孩子的糖果数更新为右边孩子的糖果数+1.

    代码如下:

    class Solution {
        public int candy(int[] ratings) {
            int people = ratings.length;
            int[] candies = new int[people];
            for(int i = 0; i < people; i++){
                candies[i] = 1;
            }
            for(int j = 1; j < people; j++){
                if(ratings[j] > ratings[j-1]){
                    candies[j] = candies[j-1] + 1;
                }
            }
            for(int k = people-1; k > 0; k--){
                if(ratings[k] < ratings[k-1]){
                    candies[k-1] = (candies[k-1]>candies[k]+1)? candies[k-1] : candies[k]+1;
                }
            }
            int res = 0;
            for(int a : candies){
                res += a;
            }
            return res;
        }
    }
  • 相关阅读:
    普通锁和分布式锁
    java 正则表达式
    java 字符串转date 格式转换
    消息中间件 kafka
    数据的存储方式:对象存储、文件存储、块存储
    Exceptional Control Flow(6)
    Exceptional Control Flow(5)
    Exceptional Control Flow(4)
    Exceptional Control Flow(3)
    Exceptional Control Flow(2)
  • 原文地址:https://www.cnblogs.com/WakingShaw/p/14660716.html
Copyright © 2011-2022 走看看