困难
相关标签
相关企业
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到
1
个糖果。 - 相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
思考:
1.至少分配一个糖果,那么需要构建一个和rating等长的数组result;将数组的每个的值置为1;
2,将“相邻两个孩子评分更高的孩子会获得更多的糖果。”拆分为两种规则,左规则和右规则然后对rating 进行两次遍历。
左规则:当 ratings[i−1]<ratings[i] i 号学生的糖果数量将比 i−1号孩子的糖果数量多。
右规则:当 ratings[i]>ratings[i+1]时,i号学生的糖果数量将比 i+1号孩子的糖果数量多。
class Solution {
public int candy(int[] ratings) {
// 根据数组的大小,首先每个孩子都需要至少一个糖果;
int[] result = new int[ratings.length];
for(int i=0;i<ratings.length;i++){
result[i]=1;
}
for(int i = 1;i<ratings.length;i++){
if(ratings[i]>ratings[i-1]){
result[i] = result[i-1]+1;
}
}
for(int i = ratings.length-2;i>=0;i--){
if(ratings[i]> ratings[i+1]){
result[i] = Math.max(result[i], result[i + 1] + 1);
}
}
return Arrays.stream(result).sum();
}
}