
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
浙公网安备 33010602011771号