题解 | #分糖果问题#

分糖果问题

https://www.nowcoder.com/practice/76039109dd0b47e994c08d8319faa352

class Solution:
    def candy(self , arr: List[int]) -> int:
        # write code here
        candy = [1 for _ in range(len(arr))]

        for i in range(1, len(arr)):
            if arr[i-1] < arr[i]:
                candy[i] = candy[i-1]+1
        
        res = candy[-1]
        i = len(arr) - 2

        while i >= 0:
            if arr[i] > arr[i+1] and candy[i] <= candy[i+1]:
                candy[i] = candy[i+1] + 1
            res += candy[i]
            
            i -= 1

        return res

解题思路

  • 先从左往右遍历,如果当前得分比前一个得分高,则当前糖果数等于前一个糖果数加一;
  • 再从右往左遍历,如果当前的得分高于后一个得分,且糖果数小于等于后一个的,则当前糖果数等于后一个的糖果数加一;
  • 不断地累加糖果数量,得到最终的糖果数。

复杂度

  • 时间复杂度为O(N);
  • 空间复杂度为O(N)。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务