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

news/2024/7/7 18:44:15

今日任务

目录

503.下一个更大元素 II - Medium

42.接雨水 - Hard


503.下一个更大元素 II - Medium

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

给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素

数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。

提示:如何处理循环数组 - 将两个nums数组拼接在一起,使用单调栈计算出每一个元素的下一个最大值,最后再把结果集即result数组resize到原数组大小;或者也可以不扩充nums,而是在遍历的过程中模拟走了两边nums

class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        ans = [-1] * len(nums)
        stack = []
        for i in range(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.接雨水 - Hard

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

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

提示:单调栈是按照行方向来计算雨水;从栈头(元素从栈头弹出)到栈底的顺序应该是从小到大的顺序,因为一旦发现添加的柱子高度大于栈头元素了,此时就出现凹槽了,栈头元素就是凹槽底部的柱子,栈头第二个元素就是凹槽左边的柱子,而添加的元素就是凹槽右边的柱子

class Solution:
    def trap(self, height: List[int]) -> int:
        # 单调栈
        '''
        单调栈是按照 行 的方向来计算雨水
        从栈顶到栈底的顺序:从小到大
        通过三个元素来接水:栈顶,栈顶的下一个元素,以及即将入栈的元素
        雨水高度是 min(凹槽左边高度, 凹槽右边高度) - 凹槽底部高度
        雨水的宽度是 凹槽右边的下标 - 凹槽左边的下标 - 1(因为只求中间宽度)
        '''
        # stack储存index,用于计算对应的柱子高度
        stack = [0]
        result = 0
        for i in range(1, len(height)):
            if height[i] < height[stack[-1]]:
                stack.append(i)
            elif height[i] == height[stack[-1]]:
                stack.pop()
                stack.append(i)
            else:
                while stack and height[i] > height[stack[-1]]:
                    mid_height = height[stack[-1]]
                    stack.pop()
                    if stack:
                        left_height = height[stack[-1]]
                        right_height = height[i]
                        h = min(left_height, right_height) - mid_height
                        w = i - stack[-1] - 1
                        result += h * w
                stack.append(i)
        return result

http://lihuaxi.xjx100.cn/news/1319493.html

相关文章

【C语言基础】函数(2)

在函数&#xff08;1&#xff09;中我们已经讲过了函数的定义&#xff0c;形参与实参&#xff0c;函数的调用&#xff0c;局部变量与栈内存 接下来还有几个要强调的函数相关知识。 一、静态函数 静态函数是在函数声明前加上关键字 static 的函数。静态函数在C语言中具有以…

MySQL的高可用性方案有哪些?MySQL的字段类型如何选择和优化?MySQL的并发控制机制是怎样的?MySQL的全文搜索如何实现?

1、MySQL的高可用性方案有哪些&#xff1f; MySQL的高可用性方案有以下几种&#xff1a; 主从复制&#xff08;Master-Slave Replication&#xff09;&#xff1a;这是MySQL最常用的高可用性方案之一。在主从复制中&#xff0c;一个主数据库&#xff08;Master&#xff09;接收…

2023-07-07 LeetCode每日一题(过桥的时间)

2023-07-07每日一题 一、题目编号 2532. 过桥的时间二、题目链接 点击跳转到题目位置 三、题目描述 共有 k 位工人计划将 n 个箱子从旧仓库移动到新仓库。给你两个整数 n 和 k&#xff0c;以及一个二维整数数组 time &#xff0c;数组的大小为 k x 4 &#xff0c;其中 tim…

Vue组件库Element-常见组件-分页

常见组件-Pagination 分页 Pagination 分页&#xff1a;当数据过多时&#xff0c;会使用分页分解数据 具体关键代码如下&#xff1a;&#xff08;重视注释&#xff09; <template><div><!-- Pagination 分页 --><el-pagination background layout"…

如何使用ChatGPT的API(四)思维链推理

在回答一个具体问题之前&#xff0c;模型对问题进行详细的推理是很重要的。有时&#xff0c;模型可能会因为急于得出结论而犯推理错误&#xff0c;所以我们可以仔细设计prompt&#xff0c;要求在模型提供最终答案之前进行一系列相关的推理步骤&#xff0c;这样它就可以更长时间…

“量贩零食”热潮袭来:真风口还是假繁荣?

以前只听过量贩式KTV&#xff0c;现在“量贩零食店”也出现在了大街小巷。 高考结束后&#xff0c;家住武汉的花花频繁逛起了量贩零食店。这类店把各种零食集合在一起销售&#xff0c;用低价来换取高销量&#xff0c;主打一个性价比。店里的散装零食即便按斤售卖&#xff0c;也…

ideal一直updating index的解决方法 亲测有效

方法&#xff1a;取消每次启动下载 步骤&#xff1a; Setting -> Tools -> Shared Indexes 页面中JDKs和Maven 都改成如图不下载 apply即可

【ConfluxNews】2023.7.7 吾辈当自强

1.【网络状态】当前版本V2.2.4&#xff0c;全网算力≈7T&#xff0c;昨日交易次数22K&#xff0c;昨日新增账户2.44K&#xff0c;昨日新增合约12个&#xff1b; 2.【POS参数】总锁仓320M&#xff0c;节点总数280&#xff0c;年利率13.3%&#xff08;理论计算&#xff09;&#…