File tree 1 file changed +71
-0
lines changed
1 file changed +71
-0
lines changed Original file line number Diff line number Diff line change
1
+ #### 135. 分发糖果
2
+
3
+ 难度:困难
4
+
5
+ ---
6
+
7
+ ` n ` 个孩子站成一排。给你一个整数数组 ` ratings ` 表示每个孩子的评分。
8
+
9
+ 你需要按照以下要求,给这些孩子分发糖果:
10
+
11
+ * 每个孩子至少分配到 ` 1 ` 个糖果。
12
+ * 相邻两个孩子评分更高的孩子会获得更多的糖果。
13
+
14
+ 请你给每个孩子分发糖果,计算并返回需要准备的 ** 最少糖果数目** 。
15
+
16
+ ** 示例 1:**
17
+
18
+ ```
19
+ 输入:ratings = [1,0,2]
20
+ 输出:5
21
+ 解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。
22
+ ```
23
+
24
+ ** 示例 2:**
25
+
26
+ ```
27
+ 输入:ratings = [1,2,2]
28
+ 输出:4
29
+ 解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
30
+ 第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。
31
+ ```
32
+
33
+ ** 提示:**
34
+
35
+ * ` n == ratings.length `
36
+ * ` 1 <= n <= 2 * 10^4 `
37
+ * ` 0 <= ratings[i] <= 2 * 10^4 `
38
+
39
+ ---
40
+
41
+ 两遍遍历:
42
+
43
+ 1 . 第一次从左向右遍历,记录当前数只与相邻** 左** 数比较后应获得的糖果数
44
+ 2 . 第二次从右向左遍历,记录当前数只与相邻** 右** 数比较后应获得的糖果数,两者取最大值。
45
+
46
+ 根据题意,需要准备** 最少** 的糖果数,因此相邻数进行比较时,评分高的孩子的糖果数一定是比评分低的只多一颗糖果。
47
+
48
+ ```
49
+ func candy(ratings []int) int {
50
+ n := len(ratings)
51
+ candies := make([]int, n)
52
+ for i := range candies {
53
+ candies[i] = 1
54
+ }
55
+ for i := 1; i < n; i++ {
56
+ if ratings[i] > ratings[i - 1] {
57
+ candies[i] = candies[i - 1] + 1
58
+ }
59
+ }
60
+ for i := n - 2; i >= 0; i-- {
61
+ if ratings[i] > ratings[i + 1] {
62
+ candies[i] = max(candies[i], candies[i + 1] + 1)
63
+ }
64
+ }
65
+ res := 0
66
+ for i := range candies {
67
+ res += candies[i]
68
+ }
69
+ return res
70
+ }
71
+ ```
You can’t perform that action at this time.
0 commit comments