leetcode: Candy

本文介绍了一种使用贪心算法解决糖果分配问题的方法。通过两次遍历数组,先处理递增序列再处理递减序列,确保了每个孩子得到的糖果数符合题目要求,并且最小化了糖果总数。

贪心的思路....如果i+1的权值大于i,那么i+1比i多一个糖果就行;但是当i+1权值小于i的时候就不好判断.....我们不妨从右至左从左至右遍历两遍....第一遍只给递增的赋值,第二遍只给递减的赋值,同时还能修正递增赋值中可能会导致的冲突....


public class Solution {
    public int candy(int[] ratings) {
        int len = ratings.length;
        if(len==0)
        {
            return 0;
        }
        int[] count = new int[len];
        count[0]=1;
        for(int i=1;i<len;i++)
        {
            if(ratings[i-1]<ratings[i])
            {
                count[i] = count[i-1]+1;
            }
            else
            {
                count[i] = 1;
            }
        }
        int res = count[len-1];
        for(int i=len-2;i>=0;i--)
        {
            if(ratings[i+1]<ratings[i])
            {
                count[i] = Math.max(count[i],count[i+1]+1);
            }
            res += count[i];
        }
        return res;
    }
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值