描述
有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:
- 每个小朋友至少要分得一颗糖果
- 分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
你最少要分发多少颗糖果?
示例1
输入:
[1,2,2]
返回值:
4
class Solution {
public:
int candy(vector<int> &ratings) {
int n = ratings.size();
int *dp = new int[n], sum = 0;
for(int i=0;i<n;i++) dp[i] = 1;
for(int i=1;i<n;i++)
if(ratings[i] > ratings[i-1])
dp[i] = dp[i-1] + 1;
for(int i=n-1;i>0;i--)
if(ratings[i-1] > ratings[i] && dp[i-1] <= dp[i])
dp[i-1] = dp[i] + 1;
for(int i=0;i<n;i++) sum += dp[i];
return sum;
}
};