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?
一个抠门的人要给一群孩子发糖果,在保证在相邻的孩子之间的rating较高者应该比rating低的获得更多的糖果的情况下,怎样发最少的糖果。
左右各遍历一次即可,代码如下所示:
1 class Solution {
2 public:
3 int candy(vector<int>& ratings) {
4 int sz = ratings.size();
5 vector<int>candy(sz, 0);
6 if(sz == 0) return 0;
7 if(sz == 1) return 1;
8 candy[0] = 1;
9 for(int i = 1; i < sz; ++i){
10 if(ratings[i] > ratings[i-1])
11 candy[i] = candy[i-1] + 1;
12 else
13 candy[i] = 1;
14 }
15 for(int i = sz-2; i >= 0; i--){
16 if(ratings[i] > ratings[i+1])
17 if(candy[i] <= candy[i+1])
18 candy[i] = candy[i+1] + 1;
19 }
20 int sum = accumulate(candy.begin(), candy.end(), 0);
21 return sum;
22 }
23 };
来源:https://www.cnblogs.com/-wang-cheng/p/5002861.html