有N个孩子站在一条线上。 每个孩子都被分配一个评分值。你给这些孩子,每个孩子必须至少有一个糖果具有较高评级的儿童比邻居获得更多的糖果。 你必须给予的最低
2017-10-07 09:12
471 查看
本题源自LeetCode
--------------------------------------------------------------------
贪心算法
1 初始化给每个孩纸一个糖果
2 从左向右扫描如果评分比前面的高 就比前面的糖果加1
3 从右向左扫描与 如果比前面的评分低,糖果比前面的多,就把前面的糖果变为后面的加1
int candy(vector<int> &ratings) {
int len=ratings.size();
if(len==0)
return 0;
if(len==1)
return 1;
int sum=0;
//每个孩子初始化 有1 个糖果
vector<int> sandy(len,1);
//从左向右扫描 与前比
for(int i=1;i<len;i++){
if(ratings[i]>ratings[i-1])
sandy[i]=sandy[i-1]+1;
}
//从右向左扫描 与后比
for(int i=len-1;i>0;i--){
sum+=sandy[i];
if(ratings[i]<ratings[i-1]&&sandy[i]>=sandy[i-1]){
sandy[i-1]=sandy[i]+1;
}
}
sum+=sandy[0];
return sum;
}
--------------------------------------------------------------------
贪心算法
1 初始化给每个孩纸一个糖果
2 从左向右扫描如果评分比前面的高 就比前面的糖果加1
3 从右向左扫描与 如果比前面的评分低,糖果比前面的多,就把前面的糖果变为后面的加1
int candy(vector<int> &ratings) {
int len=ratings.size();
if(len==0)
return 0;
if(len==1)
return 1;
int sum=0;
//每个孩子初始化 有1 个糖果
vector<int> sandy(len,1);
//从左向右扫描 与前比
for(int i=1;i<len;i++){
if(ratings[i]>ratings[i-1])
sandy[i]=sandy[i-1]+1;
}
//从右向左扫描 与后比
for(int i=len-1;i>0;i--){
sum+=sandy[i];
if(ratings[i]<ratings[i-1]&&sandy[i]>=sandy[i-1]){
sandy[i-1]=sandy[i]+1;
}
}
sum+=sandy[0];
return sum;
}
相关文章推荐
- 人是网络社会的一个节点,想要获得更多,就必须要让你这个节点通过更多的交换
- To_10_r_100_1---N个孩子站成一排,给每个人设定一个权重(已知)。按照如下的规则分配糖果
- 关于怎样用javascript判断网页上我们想要必须选择的复选框至少选择一个的问题
- 无意中找到了一个社区,一个计算机高手们的社区,一个让我获得更多计算机知识的社区。
- 一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序
- 每个 GROUP BY 表达式必须至少包含一个不是外部引用的列、加载页面时调用Js方法、调用Js文件中的方法
- 【c语言】为下面的函数原型编写函数定义,这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- DataGrid排序错误:必须至少有一个对象实现
- Excel 若要使保存的文件具有这些功能,请单击否,然后从“文件类型”列表中选择一个启用宏的文件类型
- 是不是一个android程序里面必须至少有一个activity
- 三个进程共享四个同类资源,这些资源的分配与释放只能一次一个。已知每一个进程最多需要两个资源,试问,该系统会发生死锁吗?为什么?
- 执行这些代码, Edit1只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.
- 人生感悟:一个男人必须具有的东西
- 每日总结:每个 GROUP BY 表达式必须至少包含一个不是外部引用的列、加载页面时调用Js方法、调用Js文件中的方法
- 【C语言】为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- DataGrid排序错误:必须至少有一个对象实现
- 在数组中找到至少包含一个数字的子阵具有最大的乘积
- 'VB编程 编写一个竞赛评分的函数过程。评委打分为参数(数组参数),选手得分为函数值。记分规则为:去掉一个最高分,去掉一个最低分,然后求平均。调用该函数,由键盘输入5个评委的打分(存放在数组中),输出
- int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- (转)老王有两个孩子,已知至少有一个孩子是在星期二出生的男孩。问:两个孩子都是男孩的概率是多大?