g0101_0200.s0135_candy.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0101_0200.s0135_candy;
// #Hard #Array #Greedy #2022_06_24_Time_2_ms_(99.95%)_Space_42.8_MB_(94.28%)
import java.util.Arrays;
/**
* 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.length`
* * 1 <= n <= 2 * 104
* * 0 <= ratings[i] <= 2 * 104
**/
public class Solution {
public int candy(int[] ratings) {
int[] candies = new int[ratings.length];
Arrays.fill(candies, 1);
for (int i = 0; i < ratings.length - 1; i++) {
if (ratings[i + 1] > ratings[i]) {
candies[i + 1] = candies[i] + 1;
}
}
for (int i = ratings.length - 1; i > 0; i--) {
if (ratings[i - 1] > ratings[i] && candies[i - 1] < candies[i] + 1) {
candies[i - 1] = candies[i] + 1;
}
}
int total = 0;
for (int candy : candies) {
total += candy;
}
return total;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy