Candy

来源:互联网 发布:盐城办公软件培训 编辑:程序博客网 时间:2024/06/06 09:54

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


0 0
原创粉丝点击