您的位置:首页 > 其它

Candy

2015-08-29 18:45 218 查看
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?

Solution:

class Solution {
public:
int candy(vector<int>& ratings) {
int len = ratings.size();
if(len <= 1) return len;
vector<int> num(len, 1);
int start = 0, count = 0;
while(start < len)
{
for(int i = start + 1; i < len; ++i)
{
if(ratings[i-1] > ratings[i]) count++;
else break;
}
for(int i = start; i <= start + count; ++i) num[i] += count - i + start;
start += count + 1;
count = 0;
}
for(int i = 1; i < len; ++i)
{
if(ratings[i] > ratings[i-1]) num[i] = num[i-1] + 1;
else if(ratings[i] == ratings[i-1]) continue;
else
{
if(num[i] >= num[i-1])
{
int j = i;
while(--j >= 0 && ratings[j] > ratings[j+1] && num[j] <= num[j+1]) num[j] = num[j+1] + 1;
}
}
}
int res = 0;
for(int i = 0; i < len; ++i) res += num[i];

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