---
# System prepended metadata

title: 'LeetCode #135 [Candy](https://leetcode.com/problems/candy/)'
tags: [LeetCode, Greedy Algorithm, Hard]

---

###### tags: `LeetCode` `Greedy Algorithm` `Hard`
# LeetCode #135 [Candy](https://leetcode.com/problems/candy/)
### (Hard)
老師想給孩子們分發糖果，有 N 個孩子站成了一條直線，老師會根據每個孩子的表現，預先給他們評分。
你需要按照以下要求，幫助老師給這些孩子分發糖果：
每個孩子至少分配到 1 個糖果。
評分更高的孩子必須比他兩側的鄰位孩子獲得更多的糖果。
那麼這樣下來，老師至少需要準備多少顆糖果呢？


---
使用貪心法則, 遍歷數組兩次。

第一次, 每個小孩若比他左邊的小孩評價高, 則必須拿到比左邊小孩的糖果數多1的糖果; 第二次則與右邊相比。

由於兩次比較都是確保小孩能拿到的最低糖果數, 所以最後得到的答案就是最小值。



---
```
class Solution {
public:
    int candy(vector<int>& ratings) {
        int n=ratings.size();
        vector<int> c(n,1);
        for(int i=1;i<n;i++){
            if(ratings[i]>ratings[i-1])c[i]=max(1,c[i-1]+1);
        }
        for(int i=n-2;i>=0;i--){
            if(ratings[i]>ratings[i+1])c[i]=max(c[i],c[i+1]+1);
        }
        int ans=0;
        for(auto &a:c)ans+=a;
        return ans;
    }
};
```