分糖果问题

Posted vector6_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分糖果问题相关的知识,希望对你有一定的参考价值。

分糖果问题

一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:

  1. 每个孩子不管得分多少,起码分到一个糖果。

  2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)

给定一个数组arr代表得分数组,请返回最少需要多少糖果。

class Solution {
public:
    /**
     * 遍历两次,先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1;
     * 再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加1。
     * @return int整型
     */
    int candy(vector<int>& arr) {
        if(arr.size()<2)
            return arr.size();
        int n = arr.size();
        vector<int> res(n,1);
        for(int i=1; i<n; ++i)
        {
            if(arr[i] > arr[i-1])
                res[i] = res[i-1]+1;
        }
        
        for(int i=n-1; i>0; --i)
        {
            if(arr[i-1]>arr[i])
                res[i-1] = max(res[i-1], res[i]+1);
        }
        int sum = 0;
        for(int i=0; i<res.size(); ++i)
        {
            sum += res[i];
        }
        return sum;
    }
};

以上是关于分糖果问题的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode之小孩分糖果

0305-分糖果

575. 分糖果『简单』

分糖果问题

9.22 分糖果问题

历届试题 分糖果