135. Candy
2026/1/12大约 1 分钟约 333 字
135. Candy
难度: Hard
题目描述
There are n children standing in a line. Each child is assigned a rating value given in the integer array ratings.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
Return the minimum number of candies you need to have to distribute the candies to the children.
Example 1:
Input: ratings = [1,0,2] Output: 5 Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies respectively.
Example 2:
Input: ratings = [1,2,2] Output: 4 Explanation: You can allocate to the first, second and third child with 1, 2, 1 candies respectively. The third child gets 1 candy because it satisfies the above two conditions.
Constraints:
n == ratings.length1 <= n <= 2 * 1040 <= ratings[i] <= 2 * 104
解题思路
代码实现
解决方案
java
class Solution {
public int candy(int[] ratings) {
int n = ratings.length;
int[] target = new int[n];
Arrays.fill(target, 1);
for (int i = 1; i < n; i++) {
if (ratings[i] > ratings[i - 1]) {
target[i] = target[i - 1] + 1;
} else if (ratings[i] < ratings[i - 1]) {
for (int j = i; j > 0; j--) {
if (ratings[j] < ratings[j - 1]&&target[j]>=target[j - 1]) {
target[j - 1]++;
continue;
}
break;
}
}
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += target[i];
}
return sum;
}
}