每个人至少要有一个,每个人先给一个。从左到右扫一遍,左比右小则右加1,但此时如果左比右大并没有更新左,所以还需要从右到左走一次,如果左边的值比右边的大,但是左边的糖果却不比右边的多,就把左边的糖果更新为右边的加1.

 1 class Solution {
 2 public:
 3     int candy(vector<int>& ratings) {
 4         int len=ratings.size();
 5         vector<int> res(len,1);
 6         for(int i=0;i<len-1;i++)
 7         {
 8             if(ratings[i]<ratings[i+1])
 9             {
10                 res[i+1]=res[i]+1;
11             }
12         }
13         for(int i=len-1;i>0;i--)
14         {
15             if(ratings[i]<ratings[i-1] && res[i]>=res[i-1])
16             {
17                 res[i-1]=res[i]+1;
18             }
19         }
20         int all=0;
21         for(int j=0;j<len;j++)
22         {
23             all+=res[j];
24         }
25         return all;
26     }
27 };