leetcode-135. 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?

题意解析:

题目大概就是说有一群小孩,每个小孩有个得分,现在要给小孩子发糖,得分高的小孩应该比他旁边得分低的小孩得到的糖果要多,求问最少需要多少糖果。

最少的情况其实很简单,就是最低的人是1,比他高一点就+1,这道题难度是hard,可是我感觉只有easy,因为思路是直的,完全没拐弯,代码如下:

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

复杂度O(n),其实就是正向一次,反向一次。正向的时候默认是1,如果右边比左边高,就在原来的基础上+1,否则都是1。反向的时候,如果左边比右边高,而且左边糖果没有右边多,那左边的糖果就在右边的基础上+1。


结果也是在最快的那一组里面。别的算法我也想不到。不知道为什么有的人时间会那么慢。


阅读更多
文章标签: leetcode java 题解
所属专栏: LeetCode题解
想对作者说点什么? 我来说一句

eye candy 4000 Demo

2011年05月21日 962KB 下载

没有更多推荐了,返回首页

不良信息举报

leetcode-135. Candy

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭