Leetcode笔记----135.分发糖果

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

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

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

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

又是根据数组的数据赋值的问题,和贪心算法的初始题分发饼干类似。本题思路在于两次遍历数组,先从左到右遍历,初始糖果值为1,如果大于前面的数则+1,这一过程便是贪心算法的体现,将得到的糖果数先都存储在数组中。然后从右向左遍历,规则是前面的反过来,一边遍历一边在结果中加上左遍历和右遍历的最大值。

class Solution {
    public int candy(int[] ratings) {
         int count = 0;
         int []left = new int[ratings.length];
         int right = 1; //从右边数起的最小糖果数
         for(int i=0;i<ratings.length;i++){
             if(i>0 && ratings[i]>ratings[i-1]){
                 left[i] = left[i-1]+1;
             }
             else{
                 left[i] = 1;
             }
         }
         for(int i=ratings.length-1;i>=0;i--){
             if(i!=ratings.length-1 && ratings[i]>ratings[i+1]){
                 right++;
             }
             else{
                 right = 1;
             }
             count+=Math.max(left[i],right);
         }
         return count;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值