Day 52 单调栈 part02

Day 52 单调栈 part02

  • 解题理解
    • 503
    • 42

2道题目
503. 下一个更大元素 II
42. 接雨水

解题理解

503

跟昨天第一题一致,只是换成了循环数组,可以假想成两个数组接起来用。

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

42

这道题想不出来,其中需要构建一个凹槽才能去算接雨水的量。

class Solution:
    def trap(self, height: List[int]) -> int:
        ans = 0
        stack = [0]
        for i in range(1, len(height)):
            while stack and height[i] > height[stack[-1]]:
                mid = stack.pop()
                if stack:
                    h = min(height[i], height[stack[-1]]) - height[mid]
                    w = i - stack[-1] - 1
                    ans += h * w
            stack.append(i)
        return ans

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