135.分发糖果

1.问题拆分成两个简单的实现 O(N) O(N)
将「相邻的孩子中,评分高的孩子必须获得更多的糖果」这句话拆分为两个规则,分别处理。
左规则:当 ratings[i−1]<ratings[i] 时,i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。
右规则:当 ratings[i]>ratings[i+1] 时,i 号学生的糖果数量将比 i+1 号孩子的糖果数量多。
class Solution {
public int candy(int[] ratings) {
//从左侧和右侧分别扫描一遍,计算当前孩子是否是比两侧的孩子优秀
int length = ratings.length;
int[] candyNum = new int[length];
for (int i = 0; i < length; i++){
candyNum[i] = 1;
}
for (int i = 1; i < length; i++){
if (ratings[i - 1] < ratings[i]){
candyNum[i] = candyNum[i - 1] + 1;
}
}
for (int i = length - 2; i >= 0; i--){
if (ratings[i + 1] < ratings[i] && candyNum[i + 1] >= candyNum[i] ){
candyNum[i] = candyNum[i + 1] + 1;
}
}
int total = 0;
for (int i = 0; i < length; i++){
total += candyNum[i];
}
return total;
}
}
浙公网安备 33010602011771号