题目描述:
题解:相邻的孩子中,评分高的孩子需要获得更多的糖果数。把这个规则拆分一下,分为只考虑与左边孩子比较的情况以及只考虑与右边孩子比较的情况。
用left,right两个数组分别存下上述两种规则对应的最优分配糖果数。最后分配的时候,对于第i个小朋友,分配给他max(left[i],right[i])个糖果就好了。
AC代码:
int candy(vector<int>& ratings) { int Len = ratings.size(); int ans = 0; int l[Len+1]; int r[Len+1]; for(int i=0;i<Len;i++) l[i] = r[i] = 0; l[0] = 1; r[Len-1] = 1; for(int i=1;i<Len;i++) { if(ratings[i] > ratings[i-1]) l[i] = l[i-1]+1; else l[i] = 1; } for(int i=Len-2;i>=0;i--) { if(ratings[i] > ratings[i+1]) r[i] = r[i+1] +1; else r[i] = 1; } for(int i=0;i<Len;i++) { ans += max(l[i],r[i]); } return ans; }