Poison

135. Candy

Greedy
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
class Solution {
public int candy(int[] ratings) {
int totalCount = 0;

int[] counts = new int[ratings.length];
Arrays.fill(counts, 1);
totalCount += counts.length;

for (int i = 1; i < ratings.length; i++) {
if (ratings[i] > ratings[i - 1]) {
while (counts[i] <= counts[i - 1]) {
counts[i]++;
totalCount++;
}
}
}

for (int i = ratings.length - 2; i >= 0; i--) {
if (ratings[i] > ratings[i + 1]) {
while (counts[i] <= counts[i + 1]) {
counts[i]++;
totalCount++;
}
}
}

return totalCount;
}
}
Greedy
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
class Solution {
public int candy(int[] ratings) {
int[] left = new int[ratings.length];
Arrays.fill(left, 1);

for (int i = 1; i < ratings.length; i++) {
if (ratings[i] > ratings[i - 1]) {
left[i] = left[i - 1] + 1;
}
}

int count = left[left.length - 1];

int[] right = new int[ratings.length];
Arrays.fill(right, 1);

for (int i = ratings.length - 2; i >= 0; i--) {
if (ratings[i] > ratings[i + 1]) {
right[i] = right[i + 1] + 1;
}

count += Math.max(left[i], right[i]); // 注意该逻辑在 if 块外执行
}

return count;
}
}
Reference

135. Candy