代码随想录算法训练营第五十九天|503. 下一个更大元素 II、42. 接雨水

LeetCode 503. 下一个更大元素 II

题目链接:503. 下一个更大元素 II - 力扣(LeetCode)

该题在上一题:496. 下一个更大元素 I - 力扣(LeetCode)的基础上,进行循环遍历,因此我们就采用取模的方式来循环。

代码:

python 复制代码
#python
class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        dp = [-1] * len(nums)
        stack = []
        for i in range(len(nums)*2):
            while(len(stack) != 0 and nums[i%len(nums)] > nums[stack[-1]]):  //取模
                    dp[stack[-1]] = nums[i%len(nums)]  //取模
                    stack.pop()
            stack.append(i%len(nums))
        return dp

LeetCode 42. 接雨水

题目链接:42. 接雨水 - 力扣(LeetCode)

之前好像考虑使用双指针尝试过该题,这次采用单调栈来实现。

代码:

python 复制代码
#python
class Solution:
    def trap(self, height: List[int]) -> int:
        stack = [0]
        result = 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
                    # 累计总雨水体积
                    result += h * w
            stack.append(i)
        return result

相关推荐
牢七4 分钟前
数据结构1111
数据结构
ghie909032 分钟前
线性三角波连续调频毫米波雷达目标识别
人工智能·算法·计算机视觉
却话巴山夜雨时i34 分钟前
74. 搜索二维矩阵【中等】
数据结构·算法·矩阵
sin_hielo39 分钟前
leetcode 3512
数据结构·算法·leetcode
_F_y40 分钟前
二分:二分查找、在排序数组中查找元素的第一个和最后一个位置、搜索插入位置、x 的平方根
c++·算法
Elias不吃糖41 分钟前
LeetCode--130被围绕的区域
数据结构·c++·算法·leetcode·深度优先
烛衔溟41 分钟前
C语言算法:动态规划基础
c语言·算法·动态规划·算法设计·dp基础
念越1 小时前
二叉树的核心概念与遍历实现(基础详解版)
数据结构
im_AMBER1 小时前
数据结构 12 图
数据结构·笔记·学习·算法·深度优先