题意:N个孩子站成一排,每个孩子分配一个分值。给这些孩子派发糖果,满足如下要求:
(1).每个孩子至少一个
(2).分值更高的孩子比他的相邻位的孩子获得更多的糖果
求至少分发多少糖果?
解题:先从左往右扫描,保证一个方向上相邻孩子分数更大的糖果更多;再从右往左扫描,保证另一方向上相邻孩子分数更大的糖果数更多
int candy(vector<int> &ratings) {
if(ratings.empty())
return 0;
int n = ratings.size();
vector<int> vec(n, 1);
int min = 0;
vec[0] = 1;
for(int i = 1; i < n; i++){
if(ratings[i]> ratings[i-1])
vec[i] = vec[i-1]+1;
}
for(int i = n-2; i >= 0; i--){
if(ratings[i]> ratings[i+1] && vec[i] < vec[i+1]+1)
vec[i] = vec[i+1]+1;
}
for(int i = 0; i< n; i++){
min += vec[i];
}
return min;
}