Solve in Python:
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?

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.


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.
class Solution:
     def candy(self, ratings):
         """
         :type ratings: List[int]
         :rtype: int
         """
         current_min = 1
         current_max = 1
         desc_len = 1
         cnt = 1
         for i in range(1, len(ratings)):
             if ratings[i] < ratings[i - 1]:
                 if current_min == 1:
                     if desc_len >= current_max:
                         cnt += desc_len + 1
                     else:
                         cnt += desc_len
                 else:
                     current_max = current_min
                     current_min = 1
                     cnt += 1
                 desc_len += 1
             elif ratings[i] > ratings[i - 1]:
                 current_min += 1
                 current_max = current_min
                 cnt += current_min
                 desc_len = 1
             else:
                 cnt += 1
                 current_min = 1
                 current_max = 1
                 desc_len = 1
         return cnt