代码随想录算法训练营第五十九天| 第十章 单调栈:503.下一个更大元素II,42.接雨水(python)

目录

503.下一个更大元素II

42.接雨水


 

503.下一个更大元素II

文字讲解链接

class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        n = len(nums)
        dp = [-1] * n
        stack = []
        for i in range(n*2):
            while(len(stack) != 0 and nums[i%n] > nums[stack[-1]]):
                    dp[stack[-1]] = nums[i%n]
                    stack.pop()
            stack.append(i%n)
        return dp

42.接雨水

文字讲解链接

class Solution:
    def trap(self, height: List[int]) -> int:
        stack = [0]
        res = 0
        for i in range(1, len(height)):
            while stack and height[i] > height[stack[-1]]:
                mid_height = stack.pop()
                if stack:
                    # 雨水高度是 min(凹槽左侧高度, 凹槽右侧高度) - 凹槽底部高度
                    h = min(height[stack[-1]], height[i]) - height[mid_height]
                    # 雨水宽度是 凹槽右侧的下标 - 凹槽左侧的下标 - 1
                    w = i - stack[-1] - 1
                    # 累计总雨水体积
                    res += h * w
            stack.append(i)
        return res

你可能感兴趣的:(算法,leetcode,python)