力扣刷题-135. 分发糖果

题目

力扣刷题-135. 分发糖果_第1张图片

题解

int candy(int* ratings, int ratingsSize){
    int * count = (int*)malloc(sizeof(int)*ratingsSize);
    for(int i = 0;i < ratingsSize;i++){
        if(i == 0){
            count[i] = 1;
            continue;
        }
        if(ratings[i]>ratings[i-1]){
            count[i] = count[i-1]+1;
        }else{
            count[i] = 1;
            int j = i-1;
            while(j>=0){
                if(ratings[j]<=ratings[j+1]){
                    break;
                }
                if(count[j]>=count[j+1]+1){
                    break;
                }
                count[j] = count[j+1]+1;
                j--;
            }
        }
    }
    int sum = 0;
    for(int i = 0;i < ratingsSize;i++){
        sum += count[i];
    }
    return sum;
}

要点

1.依次遍历数组,当本结点的得分大于上一个结点时直接赋值上一个结点的糖果数+1。否则本结点糖果数赋值1然后不会往回溯,之前的值都+1,直到回溯到分数变小了或者前一个结点的糖果数本来就大于等于本结点的糖果数+1才停止。

你可能感兴趣的:(刷题&&算法,leetcode,算法,c++)