题型:数组、贪心
链接:
来源: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;
}
};