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?
这题比较坑的是如果两个人相等的情况怎么办,按照正常逻辑思路来怎么说也要一样吧,这题有点坑,竟然可以比较少
比如 1 1 2 2 2数组
分到的糖果是1 1 2 1 1
还有一种方法的时间复杂度是O(n),空间复杂度是O(1)这个有点难,暂时还没想明白,以后再更新
class Solution {
public:
int candy(vector<int> &ratings) {
int size = ratings.size();
if(size<1)
return 0;
if(size<2)
return 1;
int *mark = new int[size];
for (int i = 0; i < size; i++)
{
mark[i] = 0;
}
mark[0] = 1;
for (int i = 1; i < size; i++)
{
if (ratings[i]>ratings[i-1])
mark[i]= mark[i-1]+1;
else
mark[i] = 1;
}
for (int i = size-2; i >-1; --i)
{
if(ratings[i]>ratings[i+1])
if(mark[i+1]+1 > mark[i])
mark[i] = mark[i+1]+1;
}
int sum = 0;
for (int i = 0; i < size; i++)
{
sum = sum + mark[i];
}
delete mark;
return sum;
}
};