您的位置:首页 > 其它

leetcode-candy

2014-07-11 21:57 316 查看
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;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: