牛客网刷题之分糖果

题目描述:
有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:

  1. 每个小朋友至少要分得一颗糖果
  2. 分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
    你最少要分发多少颗糖果?
    题目分析:
    给定数组每个位置表示一个排成一排的小朋友,每个位置上是小朋友的评分,返回结果是每个小朋友的糖果数量,要求是最少的糖果数量且相邻小朋友评分高的比评分低的小朋友分的糖果多。
    代码分析:
public class Solution {
    public int candy(int[] ratings) {
   		 //边界判断,当数组没有元素时返回0
          if(ratings==null||ratings.length<=0){
	        	return 0;
	        }
	        //定义一个和先朋友数量大小一致的数组用来存放糖果的数量,先将数组中置为1
	        int[] count=new int[ratings.length];
	        for(int i=0;i<ratings.length;i++ ){
	        	count[i]=1;
	        }
	        int min =0;
	        int max=ratings.length-1;
	        //从左边向右边找,如果后边元素大那么其糖果数量是前一个小朋友糖果数量加1
	    	  while(min<ratings.length-1){
	    		  if(ratings[min]<ratings[min+1]){
	    			  count[min+1]=count[min]+1;
	    		  }
	    		  min++;
	    	  }
	    	  //从右边往左边找,如果前边的元素大并且前边元素的糖果数量少则前边的元素的糖果数量是后边糖果数量加1
	    	  while(max>0){
	    		  if(ratings[max]<ratings[max-1]&&count[max-1]<=count[max]){
	    			  count[max-1]=count[max]+1;
	    		  }
	    		  max--;
	    	  }
	        int sum=0;
	        //循环将糖果数组的元素累加并返回
	        for(int i=0;i<count.length;i++ ){
	        	sum+=count[i];
	        }
	        return sum;
    }
}

你可能感兴趣的:(复习时使用)