老師想給孩子們分發糖果,有 N 個孩子站成了一條直線,老師會根據每一個孩子的表現,預先給他們評分。c++
你須要按照如下要求,幫助老師給這些孩子分發糖果:函數
每一個孩子至少分配到 1 個糖果。
評分更高的孩子必須比他兩側的鄰位孩子得到更多的糖果。
那麼這樣下來,老師至少須要準備多少顆糖果呢?code
輸入:[1,0,2]
輸出:5io
貪心思想,兩次遍歷class
class Solution { public: int candy(vector<int>& ratings) { //兩次遍歷,貪心 int l = ratings.size(); if(l<2){ return l; } vector<int> s(l,1); for(int i = 1; i < l; ++i){ if(ratings[i] > ratings[i-1]){ s[i] = s[i-1]+1; } } for(int i = l-1; i > 0; --i){ if(ratings[i] < ratings[i-1]){ s[i-1] = max(s[i-1],s[i]+1); } } //accumulate累加求和函數 return accumulate(s.begin() , s.end() , 0); } };