135. Candy
There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
Each child must have at least one candy.Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
目标:给一群孩子发糖,每个孩子有一个标准值。开始时,每个孩子有一颗糖,规定标准值比他旁边高的孩子所得到的糖也要比他旁边孩子的多。
采用贪心算法,从前往后和从后往前两次遍历,开始时从前往后遍历,给孩子i+1的糖果数=给孩子i的糖果数+1,之后从后往前遍历,给孩子i-1的糖果数=max(给孩子i的糖果数+1,给孩子i-1的糖果数)。确认标准值高的孩子一定持有比他两边孩子更多的糖果。
class Solution {
public:
int candy(vector<int>& ratings) {
int size=ratings.size();
if(size<=1)
return size;
vector<int> nums(size,1);
for(int i=1;i< size;i++)
{
if(ratings[i]>ratings[i-1])
nums[i]=nums[i-1]+1;
}
for(int i=size-1;i>0;i--)
{
if(ratings[i-1]>ratings[i])
nums[i-1]=max(nums[i]+1,nums[i-1]);
}
int result=0;
for(int i=0;i<size;i++)
{
result+=nums[i];
}
return result;
}
};