
求解代码
java
public int candy(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int n = arr.length;
int[] candyCount = new int[n]; // 定义数组记录每个孩子最终应分得的糖果数
int ans = 0; // 统计分发糖果的总数量
// 每个孩子至少分得1颗糖果
for(int i=0;i<arr.length;i++){
candyCount[i]=1;
}
// 从左到右遍历数组,保证相邻孩子中,右侧评分更高的孩子糖果数多于左侧
for(int i=1;i<n;i++){
if(arr[i] > arr[i-1]){
candyCount[i] = candyCount[i-1] + 1;
}
}
// 从右到左遍历数组,保证相邻孩子中,左侧评分更高的孩子糖果数多于右侧
for(int i=n-2;i>=0;i--){
if(arr[i] > arr[i+1] && candyCount[i] <= candyCount[i+1]){
candyCount[i] = candyCount[i+1] + 1;
}
}
// 累加所有孩子的糖果数,得到分发的总数量
for (int i = 0; i < n; i++) {
ans += candyCount[i];
}
// 返回总糖果数
return ans;
}