贪心的思路....如果i+1的权值大于i,那么i+1比i多一个糖果就行;但是当i+1权值小于i的时候就不好判断.....我们不妨从右至左从左至右遍历两遍....第一遍只给递增的赋值,第二遍只给递减的赋值,同时还能修正递增赋值中可能会导致的冲突....
public class Solution {
public int candy(int[] ratings) {
int len = ratings.length;
if(len==0)
{
return 0;
}
int[] count = new int[len];
count[0]=1;
for(int i=1;i<len;i++)
{
if(ratings[i-1]<ratings[i])
{
count[i] = count[i-1]+1;
}
else
{
count[i] = 1;
}
}
int res = count[len-1];
for(int i=len-2;i>=0;i--)
{
if(ratings[i+1]<ratings[i])
{
count[i] = Math.max(count[i],count[i+1]+1);
}
res += count[i];
}
return res;
}
}
本文介绍了一种使用贪心算法解决糖果分配问题的方法。通过两次遍历数组,先处理递增序列再处理递减序列,确保了每个孩子得到的糖果数符合题目要求,并且最小化了糖果总数。
900

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



