020-Candy

作者: Woodlouse | 来源:发表于2020-05-28 21:31 被阅读0次

    描述

    N个小朋友站成一排,每个小朋友都有各自的权重值,现在给小朋友分糖果,原则如下:

    1,每个小朋友至少有一个糖果;

    2,权重值高的小朋友分到的糖果要大于挨着的小朋友的数量;

    一共要至少分配多少个糖果呢?

    分析

    首先,每个小朋友先分一个糖果,然后设定一个初始值为1的增幅变量inc

    1,从左向右遍历数组,如果a[i]>a[i-1],则increment[i]赋值为inc,同时inc增加1;若果a[i]<a[i-1],则inc=1

    2,从右向左遍历数组,如果a[i]>a[i+1],则increment[i]赋值为inc,同时inc增加1;若果a[i]<a[i-1],则inc=1

    实现

    int candy00(vector<int> &ratings)
    {
        const size_t n = ratings.size();
        vector<int> increment(n);
        
        // 从左往右扫描
        for(int i=1, inc=1; i<n; i++) {
            if (ratings[i] > ratings[i-1]) {
                increment[i] = max(inc++, increment[i]);
            } else {
                inc = 1;
            }
        }
        
        // 从右往左扫描
        for (int i=n-2, inc=1; i>=1; i--) {
            if (ratings[i] > ratings[i+1]) {
                increment[i] = max(inc++, increment[i]);
            } else {
                inc = 1;
            }
        }
        
        return accumulate(&increment[0], &increment[0]+n, n);
    }
    

    相关文章

      网友评论

          本文标题:020-Candy

          本文链接:https://www.haomeiwen.com/subject/dwyzahtx.html