题解 | #分糖果问题#

分糖果问题

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;
}
全部评论

相关推荐

评论
2
收藏
分享
牛客网
牛客企业服务