1 /*
 2  * @Author: yaodaoteng
 3  * @Date: 2020-12-04 20:10:38
 4  * @LastEditors: yaodaoteng
 5  * @LastEditTime: 2020-12-04 20:19:04
 6  * @FilePath: \leetcode\135.分发糖果.cpp
 7  */
 8 /*
 9  * @lc app=leetcode.cn id=135 lang=cpp
10  *
11  * [135] 分发糖果
12  */
13 
14 // @lc code=start
15 class Solution {
16 public:
17 /*先确定每个孩子左边的情况(也就是从前向后遍历)
18 
19 如果ratings[i] > ratings[i - 1] 那么[i]的糖 一定要比[i - 1]的糖多一个,所以贪心:candyVec[i] = candyVec[i - 1] + 1
20 
21 确定每个孩子右边的情况一定要从后向前遍历!
22 
23 此时又要开始贪心,如果 ratings[i] > ratings[i + 1],就取candyVec[i + 1] + 1 和 candyVec[i] 最大的糖果数量,因为candyVec[i]只有取最大的才能既保持对左边candyVec[i - 1]的糖果多,也比右边candyVec[i + 1]的糖果多。
24 */
25 
26     int candy(vector<int>& ratings) {
27         int n = ratings.size();
28         vector<int> res(n, 1);
29         for (int i = 1; i < n;i++){
30             if(ratings[i]>ratings[i-1])
31                 res[i] = res[i - 1] + 1;
32         }
33 
34         for (int i = n - 2; i >= 0;i--){
35             if(ratings[i]>ratings[i+1])
36                 res[i] = max(res[i], res[i + 1] + 1);
37         }
38 
39        
40         return accumulate(res.begin(), res.end(),0);
41     }
42 };
43 // @lc code=end