每个人至少要有一个,每个人先给一个。从左到右扫一遍,左比右小则右加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 };