贪心算法:分发糖果
那么本题我采用了两次贪心的策略:
一次是从左到右遍历,只比较右边孩子评分比左边大的情况。
一次是从右到左遍历,只比较左边孩子评分比右边大的情况。
注意实现细节!
class Solution {
public:
int candy(vector<int>& ratings) {
//贪心算法
//先从左往右遍历
//再从右往左遍历
//初始化给每个人一块饼干
vector<int> nums(ratings.size(), 1);
//从前往后
for(int i = 1; i < nums.size(); i++)
{
if(ratings[i] > ratings[i - 1])
{
nums[i] = nums[i - 1] + 1;
}
}
//从后往前
for (int i = ratings.size() - 2; i >= 0; i--)
{
if (ratings[i] > ratings[i + 1] )
{
nums[i] = max(nums[i], nums[i + 1] + 1);
}
}
//统计结果
int result = 0;
for(auto num : nums)
{
result += num;
}
return result;
}
};