There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
思路:
之前用暴力解法,超时。。。。参考网上Accepted解法:贪心法,先正序遍历,处理前一个小于后一个的情况,再逆序处理前一个大于后一个的情况(因为这种情况会导致更前面的分配到的candies发生变化,故逆序处理。),时间复杂度为o(n),空间复杂度o(n).
代码:
int candy(vector<int> &ratings) {
int len=ratings.size();
int res=0;
int *candyArray=new int[len];
for(int i=0; i<len; ++i)
{
candyArray[i]=1;
}
for(int i=0; i<len-1; ++i)
{
if(ratings[i]<ratings[i+1])
{
candyArray[i+1]=candyArray[i]+1;
}
}
int tmp=0;
for(int i=len-1; i>0; --i)
{
if(ratings[i] < ratings[i-1])
{
tmp=candyArray[i]+1;
if(candyArray[i-1]<tmp)
{
candyArray[i-1]=tmp;
}
}
}
for(int i=0; i<len; ++i)
{
res=res+candyArray[i];
}
return res;
}
解决一个关于给儿童分配糖果的问题,确保每个孩子至少得到一个糖果,并且评分高的孩子比邻居得到更多糖果。采用贪心算法,首先正序遍历处理评分递增情况,然后逆序处理递减情况。
203

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



