[LeetCode] Candy

来源:互联网 发布:php开发工具中文版 编辑:程序博客网 时间:2024/05/21 10:19

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?

通过分析,我们可以发现:无外乎就是3种情况:举例来说

(1) rating[0]>rating[1]  如果 candy[0]<=candy[1] candy[0]=candy[1]+1;

(1) rating[0]=rating[1] 不用管,继续走

(1) rating[0]<rating[1] 如果 candy[0]>=candy[1] candy[1]=candy[0]+1;

正的走一遍,我们只考虑i和i+1的关系,也就是child和他右边孩子的糖果数量

反过来扫一遍, 我们只考虑 i 和i-1的关系,child和他左边孩子的糖果数量

这样每一个child的左右就都满足了。一次通过

   public int candy(int[] ratings) {        int n=ratings.length;        int[] c= new int[n];        Arrays.fill(c,1);        for(int i=0;i<n-1;i++){            if(ratings[i]>ratings[i+1] && c[i]<=c[i+1]){                c[i]=c[i+1]+1;            } else if(ratings[i]<ratings[i+1] && c[i]>=c[i+1]){                c[i+1]=c[i]+1;            }        }                for(int i=n-1;i>=1;i--){            if(ratings[i]>ratings[i-1] && c[i]<c[i-1]){                c[i]=c[i-1]+1;            } else if(ratings[i]<ratings[i-1] && c[i-1]<=c[i]){                c[i-1]=c[i]+1;            }         }                           int sum=0;         for(int candy: c){             sum+=candy;         }                  return sum;                                        }


0 0