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?

思路: 先从前往后, 如果rating比前面的那个大, 就在前面那个基础上加1, 否则为1.

再从后往前,如果rating 比后面那个大, 但是candy 没有比后面那个大, 就要在后面那个基础上加1.

易错点:  记住后面往前时候, if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1])才能              candys[i] = candys[i + 1] + 1;

public class Solution {
    public int candy(int[] ratings) {
        int n = ratings.length;
        int[] candys = new int[n];
        int ret = 0;
        candys[0] = 1;
        for(int i = 1; i < n; i++){
            if(ratings[i] > ratings[i - 1]){
                candys[i] = candys[i - 1] + 1;
            }else{
                candys[i] = 1;
            }
        }
        
        ret = candys[n - 1];
        for(int i = n - 2; i >= 0; i--){
            if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1]){
                candys[i] = candys[i + 1] + 1;
            }
            ret += candys[i];
        }
        return ret;
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值