题目:
有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:
每个小朋友至少要分得一颗糖果
分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
你最少要分发多少颗糖果?
分析:
首先初始化每个人一个糖果,然后这个算法需要遍历两遍,第一遍从左向右遍历,如果右边的小盆友的等级高,等加一个糖果,这样保证了一个方向上高等级的糖果多。然后再从右向左遍历一遍,如果相邻两个左边的等级高,而左边的糖果又少的话,则左边糖果数为右边糖果数加一。最后再把所有小盆友的糖果数都加起来返回即可。
答案:
import java.util.*;
public class Solution {
/**
*
* @param ratings int整型一维数组
* @return int整型
*/
public int candy (int[] ratings) {
int[] nums = new int[ratings.length];
for (int i = 0; i < ratings.length; i++) {
nums[i] = 1;
}
for (int i = 0; i < ratings.length - 1; i++) {
if (ratings[i + 1] > ratings[i]) {
nums[i + 1] = nums[i] + 1;
}
}
for (int i = ratings.length - 1; i > 0; i--) {
if (ratings[i - 1] > ratings[i]) {
nums[i - 1] = Math.max(nums[i] + 1, nums[i - 1]);
}
}
int res = 0;
for (int i = 0; i < ratings.length; i++) {
res = res + nums[i];
}
return res;
}
}