您的位置:首页 > 理论基础 > 数据结构算法

To_10_r_100_1---N个孩子站成一排,给每个人设定一个权重(已知)。按照如下的规则分配糖果

2015-06-07 23:53 543 查看
题目:
N个孩子站成一排,给每个人设定一个权重(已知)。按照如下的规则分配糖果: (1)每个孩子至少分得一颗糖果 (2)权重较高的孩子,会比他的邻居获得更多的糖果。问:总共最少需要多少颗糖果?请分析算法思路,以及算法的时间,空间复杂度是多少。
思路:先把每个孩子的糖初始化为1,经过两轮扫描:第一轮:保证后面比前面权值高的孩子,必定多得1个糖果第二轮:保证前面比后面权值高的孩子,必定多得1个糖果把分配矩阵求和即可
C++代码实现:
int candy(int *ratings, int size){
int *distributions = new int[size];
//let all the elements of distributions to be 1
for (int i = 0; i < size; i++)
distributions[i] = 1;
for (int i = 1; i < size; i++){
if (ratings[i - 1]<ratings[i])
distributions[i] = distributions[i - 1] + 1;
}
for (int i = 1; i < size; i++){
if (ratings[size - i]<ratings[size - i - 1] && distributions[size - i] > distributions[size - i - 1])
distributions[size - i - 1] = distributions[size - i] + 1;
}
//for sum
int sum = 0;
for (int j = 0; j < size; j++)
sum += distributions[j];
//free the memory
delete[] distributions;
return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构