一:论语
二:题目
三:上码
class Solution {
public:int candy(vector<int>& ratings) {/**思路:1.这里我们分两次遍历(从左向右 从右向左)2.当我们从左向右遍历的时候 如果右边的评分比左边孩子分数高 那么右边孩子的糖果数上就在左边孩子糖果数上加一3.当我们从右向左遍历的时候,如果左边的评分比右边的评分高的话 并且其糖果个数小于右边的话那么左边孩子的糖果数 = 右边的孩子的糖果数+1*/map<int,int>m;map<int,int>:: iterator mt;int sum = 0;for(int i = 0; i < ratings.size(); i++) {m[i] = 1;}//从左向右for(int i = 0; i < ratings.size()-1; i++) {if(ratings[i+1] > ratings[i]){//右边孩子的糖果个数大于左边的糖果个数m[i+1] = m[i]+1;}}//从右向左for(int i = ratings.size()-1; i > 0; i--) {if(ratings[i-1] > ratings[i] && m[i-1] <= m[i]) {// m[i-1] <= m[i] 保证要增加糖果的一侧的m[i-1] = m[i] + 1; //糖果数是小于等于右边的} }for(mt = m.begin(); mt != m.end(); mt++) {sum += mt->second;}// int sum = accumulate(mt->second().begin(),mt->second().end(),0);return sum;}
};