题目:
有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:
- 每个小朋友至少要分得一颗糖果
- 分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
你最少要分发多少颗糖果?
示例:
输入:[1, 2, 2] 输出:4
代码:
1 import java.util.*; 2 public class Solution { 3 /** 4 * 5 * @param ratings int整型一维数组 6 * @return int整型 7 */ 8 public int candy (int[] ratings) { 9 // write code here 10 int count = 0; 11 int[] suger = new int[ratings.length]; 12 Arrays.fill(suger,1); 13 //从左至右依次比较,保证比前一个分数低的糖果多 14 for( int i = 1; i < ratings.length; i ++ ) { 15 if( ratings[i] > ratings[i - 1] ) 16 suger[i] += suger[i - 1]; 17 } 18 //从右至左依次比较,保证分数大的,糖果多 19 for( int i = ratings.length - 1; i > 0; i -- ) { 20 count += suger[i]; 21 if( ratings[i] < ratings[i - 1] && suger[i - 1] <= suger[i] ) 22 suger[i - 1] = suger[i] + 1; 23 } 24 count += suger[0]; 25 return count; 26 } 27 }
笔记:
进行两次相反方向的比较。