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?
看网上才做出来的,自己想的方法太复杂,网上大家做法基本一样,先从左往右处理左邻居的关系,再从右往左处理右邻居的关系
class Solution {
public:
int candy(vector<int> &ratings) {
vector<int> candies(ratings.size(),1);
for(size_t i=1;i<ratings.size();++i){
if(ratings[i] > ratings[i-1]) candies[i]=candies[i-1]+1;
}
for(int i=ratings.size()-1;i>=0;--i){
if(i-1 >= 0 ) {
if(ratings[i-1] > ratings[i]){
candies[i-1] =max(candies[i]+1,candies[i-1]);
}
}
}
int sum = 0;
for(size_t i=0;i<candies.size();++i){
sum+=candies[i];
}
return sum;
}
};