leetcode-candy

来源:互联网 发布:鸣人和佐助 知乎 编辑:程序博客网 时间:2024/06/06 15:45

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;
    }

0 0