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.
链接:https://leetcode.com/problems/candy/description/
题解:用分治法不知为何MLE,答案用走两遍的方法,第一遍从左到右遍历保证每个蛋糕数右边一定大于左边,第二遍从右到左保证每个蛋糕数左边一定大于右边并且取上一次和这次的最大值,这里犯错是初始化vector参数位置写反应该是vector num(n,1)
class Solution {
public:
int candy(vector<int> &ratings) {
int ans=0;
int n=ratings.size();
vector<int> num(n,1);
for(int i=1;i<n;i++){
if(ratings[i]>ratings[i-1]) num[i]=num[i-1]+1;
}
for(int i=n-2;i>=0;i--){
if(ratings[i]>ratings[i+1]){
num[i]=max(num[i],num[i+1]+1);
}
}
for(int x:num){
ans+=x;
}
return ans;
}
};