Candy
My SubmissionsThere 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?
原来以为我这个搜索算法一定会挂的,至少时间超出界限,结果竟然过了!!!
对每一个位置,检查其旁边小孩是否rating比他高,但是糖果少,然后递归==
想法很简单,原来很复杂用一个栈做,结果发现rating一样可以少的,然后就放弃那个想法。
class Solution {
public:
void dfs(vector<int> &nums,vector<int> &ratings,int i)
{
if(i+1<ratings.size() && ratings[i+1]>ratings[i] && nums[i+1]<=nums[i])
{
nums[i+1]=nums[i]+1;
dfs(nums,ratings,i+1);
}
if(i-1>=0 && ratings[i-1]>ratings[i] && nums[i-1]<=nums[i])
{
nums[i-1]=nums[i]+1;
dfs(nums,ratings,i-1);
}
}
int candy(vector<int> &ratings) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int n=ratings.size();
vector<int> nums(n,1);
bool satisfy=false;
for(int i=0;i<n;++i)
{
dfs(nums,ratings,i);
}
int sum=0;
for(int i=0;i<n;++i)
{
sum+=nums[i];
}
return sum;
}
};