题目描述:
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?
Example 1:
Input: [1,0,2]
Output: 5
Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies respectively.
Example 2:
Input: [1,2,2]
Output: 4
Explanation: You can allocate to the first, second and third child with 1, 2, 1 candies respectively. The third child gets 1 candy because it satisfies the above two conditions.
class Solution {
public:
int candy(vector<int>& ratings) {
int n=ratings.size();
vector<int> v1(n,0);
vector<int> v2(n,0);
for(int i=0;i<n;i++) //从左往右扫一遍,满足当前位置如果大于前一个邻居,那么candy数也要更多
{
if(i==0) v1[i]=1;
else if(ratings[i]>ratings[i-1]) v1[i]=v1[i-1]+1;
else v1[i]=1;
}
for(int i=n-1;i>=0;i—) //从右往左扫一遍,满足当前位置如果大于后一个邻居,那么candy数也要更多
{
if(i==n-1) v2[i]=1;
else if(ratings[i]>ratings[i+1]) v2[i]=v2[i+1]+1;
else v2[i]=1;
}
int result=0;
for(int i=0;i<n;i++) result+=max(v1[i],v2[i]); // v1[i]对左边邻居成立,v2[i]对右边邻居成立,那么选择较大值
return result;
}
};