classSolution{publicintcandy(int[] ratings){int n = ratings.length;if(n ==0)return0;// 边界处理(题目保证n≥1,可省略)// 1. 左→右遍历,处理左边约束int[] left =newint[n];left[0]=1;// 第一个孩子至少1颗for(int i =1; i < n; i++){if(ratings[i]> ratings[i-1]){left[i]= left[i-1]+1;}else{left[i]=1;}}// 2. 右→左遍历,处理右边约束int[] right =newint[n];right[n-1]=1;// 最后一个孩子至少1颗for(int i = n-2; i >=0; i--){if(ratings[i]> ratings[i+1]){right[i]= right[i+1]+1;}else{right[i]=1;}}// 3. 合并双向约束,计算总和int total =0;for(int i =0; i < n; i++){total +=Math.max(left[i], right[i]);}return total;}}