solution.md 1.8 KB
Newer Older
ToTensor's avatar
ToTensor 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
# 分发糖果

<p>老师想给孩子们分发糖果,有 <em>N</em> 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。</p>

<p>你需要按照以下要求,帮助老师给这些孩子分发糖果:</p>

<ul>
	<li>每个孩子至少分配到 1 个糖果。</li>
	<li>评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。</li>
</ul>

<p>那么这样下来,老师至少需要准备多少颗糖果呢?</p>

<p> </p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>[1,0,2]
<strong>输出:</strong>5
<strong>解释:</strong>你可以分别给这三个孩子分发 2、1、2 颗糖果。
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>[1,2,2]
<strong>输出:</strong>4
<strong>解释:</strong>你可以分别给这三个孩子分发 1、2、1 颗糖果。
     第三个孩子只得到 1 颗糖果,这已满足上述两个条件。</pre>


## template

```cpp
ToTensor's avatar
ToTensor 已提交
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int candy(vector<int> &ratings)
    {
        int len = ratings.size();
        if (len < 2)
            return len;
        int candy[len + 1];
        candy[0] = 1;
        for (int i = 1; i < len; i++)
        {
            if (ratings[i] > ratings[i - 1])
                candy[i] = candy[i - 1] + 1;
            else
                candy[i] = 1;
        }
        int ans = 0;
        for (int i = len - 1; i > 0; i--)
        {
            if (candy[i] >= candy[i - 1] && ratings[i] < ratings[i - 1])
                candy[i - 1] = max(candy[i - 1], candy[i] + 1);
            ans += candy[i];
        }
        return ans + candy[0];
    }
};
ToTensor's avatar
ToTensor 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

```

## 答案

```cpp

```

## 选项

### A

```cpp

```

### B

```cpp

```

### C

```cpp

```