题型:数组、贪心
链接:
来源:LeetCode
题目描述
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到 1个糖果。
- 相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
题目样例
题目思路
贪心,在左边的孩子满足【规则】的条件下,让右边的孩子也满足【规则】
C++代码
class Solution {
public:
    int candy(vector<int>& ratings) {
        // 让点满足两个条件:下一个比自己大的,比自己多一个糖,从左边和右边分别进行遍历
        vector<int> candyLeft(ratings.size(),1);//从左向右遍历
        vector<int>candyRight(ratings.size(),1);//从右向左遍历
        // 左遍历完
        for(int i=0;i<ratings.size()-1;++i)
        {
            if(ratings[i] < ratings[i+1])
                candyLeft[i+1] = candyLeft[i] + 1;
        }
        // 右边遍历完
        for(int i=ratings.size()-1;i>0;--i)
        {
            if(ratings[i-1] > ratings[i])
                candyRight[i-1] = candyRight[i] + 1;
        }
        int sum = 0;
        for(int i=0;i<ratings.size();i++)
            sum += max(candyLeft[i],candyRight[i]);
        return sum;
    }
};结算页面




















