首页 > 其他 > 详细

LeetCode135-Candy

时间:2021-04-15 09:12:54      阅读:19      评论:0      收藏:0      [点我收藏+]

老师想给孩子们分发糖果,有 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;
    }
}

 

LeetCode135-Candy

原文:https://www.cnblogs.com/WakingShaw/p/14660716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!