• step 1:使用一个辅助数组记录每个位置的孩子分到的糖果,全部初始化为1.
  • step 2:从左到右遍历数组,如果右边元素比相邻左边元素大,意味着在递增,糖果数就是前一个加1,否则保持1不变。
  • step 3:从右到左遍历数组,如果左边元素比相邻右边元素大, 意味着在原数组中是递减部分,如果左边在上一轮中分到的糖果数更小,则更新为右边的糖果数+1,否则保持不变。
  • step 4:将辅助数组中的元素累加求和。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# pick candy
# @param arr int整型一维数组 the array
# @return int整型
#
class Solution:
    def candy(self , arr: List[int]) -> int:
        # write code here
        n = len(arr)
        dp = [1]*n#辅助数组
        for i in range(1,n):#从左到右
            if arr[i]>arr[i-1]:
                dp[i] = dp[i-1]+1
        for i in range(n-2,-1,-1):#从右到左
            if arr[i]>arr[i+1] and dp[i]<=dp[i+1]:
                dp[i] = dp[i+1]+1
        return sum(dp)