LeetCode-135-Candy

算法描述:

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?

Example 1:

Input: [1,0,2]
Output: 5
Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies respectively.

Example 2:

Input: [1,2,2]
Output: 4
Explanation: You can allocate to the first, second and third child with 1, 2, 1 candies respectively.
             The third child gets 1 candy because it satisfies the above two conditions.

解题思路:先从左往右扫,遇到当前小孩rating值大于前一个小孩rating值,则给该小孩分的糖置为前一个小孩糖果数加一。然后从右往左扫,遇到当前小孩rating值小于后面小孩的rating值,该小孩的糖果数为当前分配的糖果数和后面小孩分配的糖果数加一两者之中的最大值。

    int candy(vector<int>& ratings) {
        int sum =0;
        vector<int> count(ratings.size(), 1);
        for(int i=1; i < ratings.size(); i++){
            if(ratings[i] > ratings[i-1]) count[i]=count[i-1]+1;
        }
        for(int i=ratings.size()-2; i >=0; i--){
            if(ratings[i] > ratings[i+1]) count[i] = max(count[i],count[i+1]+1);
        }
        for(int i=0; i < ratings.size(); i++) sum += count[i];
        return sum;
    }

 

posted on 2019-02-17 20:34  无名路人甲  阅读(110)  评论(0编辑  收藏  举报