主题思想: 正向来一次,反向来一次。
AC 代码:
class Solution {
public int candy(int[] ratings) {
if(ratings==null)return 0;
if(ratings.length<=1) return ratings.length;
int n=ratings.length;
int [] nums=new int[n];
Arrays.fill(nums,1);
for(int i=1;i<n;i++){
if(ratings[i]>ratings[i-1])nums[i]=nums[i-1]+1;
}
for(int i=n-2;i>=0;i--){
if(ratings[i]>ratings[i+1])nums[i]=Math.max(nums[i],nums[i+1]+1);
}
int total=0;
for(int i:nums)total+=i;
return total;
}
}
本文介绍了一种高效的糖果分配算法,该算法通过两次遍历数组来确保每个孩子获得的糖果数量与其评分相匹配。首先正向遍历,如果当前孩子的评分高于前一个孩子,则糖果数加一;然后反向遍历,如果当前孩子的评分高于后一个孩子,则更新糖果数为两者之差加一的最大值。最终返回总糖果数。
183

被折叠的 条评论
为什么被折叠?



