题解 | #分糖果问题#
分糖果问题
http://www.nowcoder.com/practice/76039109dd0b47e994c08d8319faa352
``` 贪婪算法
/**
* pick candy
* @param arr int整型一维数组 the array
* @param arrLen int arr数组长度
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int candy(int* arr, int arrLen ) {
int count=0;
int b[arrLen];
int i;
//对b数组赋值,初始值,每个孩子都至少有一颗糖
for(i=0;i<arrLen;i++){
b[i]=1;
}
//从左至右遍历,找出 右边得分较多的孩子,使其糖果数比相邻孩子多1
for(i=1;i<=arrLen-1;i++){
if(arr[i-1]<arr[i]){
b[i]=b[i-1]+1;
}
}
//从右至左遍历,找出左边得分较多的孩子
for(i=arrLen-1;i>0;i--){
if(arr[i-1]>arr[i]&&b[i-1]<=b[i]){
b[i-1]=b[i]+1;
}
}
//每个孩子得到的糖数量相加
for(i=0;i<arrLen;i++){
count+= b[i];
}
return count;
}