您的位置:首页 > 其它

Leetcode:Candy

2018-01-07 10:56 225 查看
Leetcode: candy

There are N children standing in a line. Each child is assigned arating value.
You are giving candies to these children subjected to the followingrequirements:
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?
思路:

因为每个人最少得到一个糖果,初始化Num_arr[]为1,表示每个人得到的起始糖果为1。

然后从起始到末尾遍历ratings数组,假如第i个的rating value比i-1的大,就将此rating value代表的Num_arr[i]变为Num_arr[i-1]+1。表示比前一个的糖果数多一个。

然后再从末尾到起始遍历ratings数组,假如第i-1个的ratingvalue比i的大,就将当前的Num_arr[i-1]与Num_arr[i]+1比较,若是Num_arr[i]+1较大,就将Num_arr[i-1]更新为Num_arr[i]+1。最终得到最小的糖果数能满足要求。

代码:

int candy(vector<int> &ratings) {
int n=ratings.size();
vector<int> Num_arr(n,1);
for(int i=1; i!=n; i++)
{
if(ratings[i]>ratings[i-1])
Num_arr[i] = Num_arr[i-1]+1;
}
for(int i=n-1; i>0; i--)
{
if(ratings[i-1]>ratings[i] && Num_arr[i-1] < Num_arr[i]+1)
Num_arr[i-1] = Num_arr[i]+1;
}
int sum=0;
for(int i=0; i!=n; i++)
sum += Num_arr[i];
return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: