> For the complete documentation index, see [llms.txt](https://code-snippets.hbamithkumara.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-snippets.hbamithkumara.com/leetcode/problems/101-200/candy.md).

# 135. Candy

### Description

There are *N* children standing in a line. Each child is assigned a rating value.

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.

What is the minimum candies you must give?

### Constraints

### Approach

### Links

* GeeksforGeeks
* [Leetcode](https://leetcode.com/problems/candy/)
* [ProgramCreek](https://www.programcreek.com/2014/03/leetcode-candy-java/)
* [YouTube](https://youtu.be/h6_lIwZYHQw)

### **Examples**

{% tabs %}
{% tab title="Example 1" %}
**Input:** \[1, 0, 2]

**Output:** 5

**Explanation:** You can allocate to the first, second and third child with 2, 1, 2 candies respectively.
{% endtab %}

{% tab title="Example 2" %}
**Input:** \[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.
{% endtab %}
{% endtabs %}

### **Solutions**

{% tabs %}
{% tab title="Solution 1" %}

```java
/**
 * Time complexity : 
 * Space complexity : 
 */

class Solution {
    public int candy(int[] ratings) {
        if(ratings.length == 0) return 0;
        int n = ratings.length;
        int[] arrLtoR = new int[n];
        int[] arrRtoL = new int[n];
        arrLtoR[0] = 1;
        arrRtoL[n-1] = 1;
        
        for(int i = 1; i < n; i++) {
            arrLtoR[i] = (ratings[i-1] < ratings[i])? arrLtoR[i-1]+1: 1;
            arrRtoL[n-i-1] = (ratings[n-i-1] > ratings[n-i])? arrRtoL[n-i]+1: 1;
        }
        
        int total = 0;
        for(int i = 0; i < n; i++) {
            total += Math.max(arrLtoR[i], arrRtoL[i]);
        }
        return total;
    }
}
```

{% endtab %}
{% endtabs %}

### **Follow up**

*
