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

503.下一个更大元素II

力扣题目链接(opens new window)

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

示例 1:

  • 输入: [1,2,1]
  • 输出: [2,-1,2]
  • 解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。

提示:

  • 1 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9

  1. 初始化:创建一个栈来保存索引,一个数组 result 来存储结果,初始时该数组的所有值设为 -1(表示没有找到下一个更大的元素)。

  2. 双重遍历:由于这是一个循环数组,我们需要遍历两次数组。第一次遍历找到每个元素右侧的第一个更大的元素,第二次遍历用来找到那些在数组末尾但它们的更大元素在数组开头的情况。

  3. 栈的使用:在遍历的过程中,每次我们考察一个新元素时,我们检查栈顶元素代表的数组值是否小于当前元素。如果是,则我们找到了栈顶元素的下一个更大元素。我们在 result 数组的相应位置记录这个更大元素,然后将栈顶元素弹出。这个过程一直持续到栈为空或者栈顶元素代表的数组值大于等于当前元素。之后,将当前元素的索引压入栈中。

  4. 循环:由于数组是循环的,我们可以通过取模操作来模拟数组的循环。

class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        n = len(nums)
        result = [-1] * n
        stack = []

        for i in range(2 * n):
            while stack and nums[stack[-1]] < nums[i % n]:
                result[stack.pop()] = nums[i % n]
            if i < n:
                stack.append(i)

        return result

42. 接雨水

力扣题目链接(opens new window)

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

示例 1:

  • 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
  • 输出:6
  • 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

示例 2:

  • 输入:height = [4,2,0,3,2,5]
  • 输出:9

在接雨水问题中,双指针法的核心思想是同时从数组的两端开始遍历,使用两个指针(leftright),分别代表数组的左端和右端。在这个过程中,我们维护两个变量(left_maxright_max),它们分别表示遍历到目前为止左侧和右侧遇到的最大高度。这样,我们可以在每个步骤中确定当前位置能够接收的雨水量。

  1. 初始化指针和变量:

    • left = 0(数组的开始位置)
    • right = len(height) - 1(数组的结束位置)
    • left_max = height[0]
    • right_max = height[len(height) - 1]
  2. 遍历数组:

    • 使用两个指针从两端开始遍历数组,直到它们相遇。
    • 在每个位置,更新 left_maxright_max
  3. 比较 left_maxright_max

    • 如果 left_max < right_max,则说明左边的柱子是短板,处理左边的柱子。
    • 否则,处理右边的柱子。
  4. 计算雨水量并累加:

    • 对于左边的柱子:left_max 是左边最高的柱子,height[left] 是当前柱子的高度,因此在位置 left 上的雨水量是 left_max - height[left]
    • 对于右边的柱子:同理,使用 right_max - height[right] 来计算雨水量。
    • 将计算出的雨水量累加到总量中。
  5. 移动指针:

    • 如果处理的是左边的柱子,将 left 指针向右移动(left += 1)。
    • 如果处理的是右边的柱子,将 right 指针向左移动(right -= 1)。
  • 这种方法之所以有效,是因为在任何位置,能够接的雨水量由左边和右边最高的柱子中较低的那个决定。
  • left_maxright_max 保证了不会超过当前位置的最大高度,因此可以安全地计算每个位置的雨水量。

 

class Solution:
    def trap(self, height: List[int]) -> int:
        if not height:
            return 0

        n = len(height)
        left, right = 0, n - 1
        left_max, right_max = height[0], height[n - 1]
        ans = 0

        while left < right:
            if left_max < right_max:
                left += 1
                left_max = max(left_max, height[left])
                ans += max(0, left_max - height[left])
            else:
                right -= 1
                right_max = max(right_max, height[right])
                ans += max(0, right_max - height[right])

        return ans

# 示例用法
sol = Solution()
print(sol.trap([0,1,0,2,1,0,1,3,2,1,2,1]))  # 输出应为 6
print(sol.trap([4,2,0,3,2,5]))               # 输出应为 9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/181377.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 安装常用环境

一、 安装linux&#xff08;完整&#xff09; 目前为止docker hub 还是被封着&#xff0c;用阿里云、腾讯云镜像找一找版本直接查就行 默认使用latest最新版 #:latest 可以不写 docker pull centos:latest # 拉取后查看 images docker images #给镜像设置标签 # docker tag […

某基金公司赵哥“逆袭”了!!!

赵哥&#xff0c;在上海一家基金公司做运维主管。 平时工作的首要任务&#xff0c;就是保障公司各项信息系统的安全运行。 万一系统运行中出现了一些重要问题&#xff0c;他还要负责进行调查、记录与汇报... 总之&#xff0c;责任很重&#xff0c;该说不说&#xff0c;搞不好…

10.分组循环练习题

分组循环 https://leetcode.cn/problems/longest-even-odd-subarray-with-threshold/solutions/2528771/jiao-ni-yi-ci-xing-ba-dai-ma-xie-dui-on-zuspx/?envTypedaily-question&envId2023-11-16 分组循环 适用场景&#xff1a; 按照题目要求&#xff0c;数组会被分割成若…

大型养殖场需要哪些污水处理设备

大型养殖场是一个涉及环境保护和可持续发展的关键行业&#xff0c;对于处理养殖场产生的污水有着明确的要求和标准。为了确保污水得到有效处理和处理效果达到国家排放标准&#xff0c;大型养殖场需要配备一系列污水处理设备。以下是几种常见的污水处理设备&#xff1a; 1. 水解…

厦门市委常委、常务副市长黄晓舟调研极狐(GitLab)

11 月 22 日&#xff0c;厦门市委常委、常务副市长黄晓舟&#xff0c;厦门市工信局副局长许文恭&#xff0c;厦门市高新技术创业中心有限公司董事长邸国栋等一行人员莅临极狐(GitLab)进行参观调研&#xff0c;深入了解极狐(GitLab)的发展情况。 黄晓舟副市长&#xff08;左&…

TikTok历史探秘:短视频中的时间之旅

在数字时代的浪潮中&#xff0c;TikTok崭露头角&#xff0c;成为社交媒体领域的一颗耀眼新星。这款短视频应用以其独特的创意、时尚和娱乐性质&#xff0c;吸引了全球数以亿计的用户。 然而&#xff0c;TikTok并非一夜之间的奇迹&#xff0c;它背后蕴藏着丰富而有趣的历史故事…

解决ElementUI时间选择器回显出现Wed..2013..中国标准时间.

使用饿了么组件 时间日期选择框回显到页面为啥是这样的&#xff1f; 为什么再时间框中选择日期&#xff0c;回显页面出现了这种英文格式呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; 其实这个问题直接使用elementui的内置属性就能解决 DateTimePicker 日期时间选择…

qs-一个序列化和反序列化的JavaScript库

起因 一个业务场景中&#xff0c;最终得到一串字符"status[0]value1&status[1]value2" 通过解析&#xff0c;理应得到一个数组&#xff0c;却得到一个对象 于是展开问题排查 最终发现是qs.parse 这个地方出了问题 排查结果 qs解析这种带下标的字符串时&#xff…

内网穿透隐秘隧道搭建

别低头&#xff0c;皇冠会掉&#xff1b;别流泪&#xff0c;贱人会笑。 本文首发于先知社区&#xff0c;原创作者即是本人 0x00 前言 构建内网隐蔽通道&#xff0c;从而突破各种安全策略限制&#xff0c;实现对目标服务器的完美控制。 当我们从外网成功获得攻击点的时候&…

实时截留抖音询价的用户:10个合规方法,让你的业务迅速增长!

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着抖音的普及度越来越高&#xff0c;越来越多的商家开始关注抖音询价用户。这些潜在客户对于企业的发展至关重要&#xff0c;如何实时截留这些用户成为商家关注的重点…

leetcode:645. 错误的集合(python3解法)

难度&#xff1a;简单 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结…

python避坑指南(更新中)

os.path.join 避免连续的/&#xff0c;看示例即清楚&#xff0c;最好的避免方法是字符串首末都不要加’/&#xff1a; join用法 用join前面的符号将参数数组里面的字符串连接起来&#xff0c;注意join只有一个参数

合并两个有序链表,剑指offer,力扣

目录 力扣题目地址&#xff1a; 原题题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff1a; 具体流程如下&#xff1a; 代码实现&#xff1a; 知识补充&#xff1a; 力扣题目地址&#xff1a; 21. 合并两个有序…

品牌如何利用情绪营销打出知名度

“悦己文化”和“她经济”的兴起让人们更加关注自己的内心感受,同时“发疯文学”、“精神内耗”等热词都体现了当代人为了缓解压力而为情绪消费的趋势&#xff0c;品牌想要留住消费者&#xff0c;就必须不断迭代&#xff0c;直面消费者需求&#xff0c;今天媒介盒子就来和大家聊…

【拿完年终奖后】想要转行网络安全,一定不要错过这个时间段。

网络安全&#xff0c;作为当下互联网行业中较为热门的岗位&#xff0c;薪资可观、人才需求量大&#xff0c;作为转行必考虑。 在这里奉劝所有零基础想转行&#xff08;入门&#xff09; 网络安全的朋友们 在转行之前&#xff0c;一定要对网络安全行业做一个大概了解&#xf…

投标文件的注意事项

一、检查标书 1.1有时候标书需要从别的地方复制黏贴文件&#xff0c;记住复制内容可以&#xff0c;但是不要复制“落款和时间”的格式&#xff0c;落款和时间的格式借鉴你的招标文件中给响应文件格式的落款和时间&#xff0c;切记&#xff01; 1.2检查标书是否有空页&#xf…

AI智能网关如何助力危化品安全监测

安全是一切发展的基石和前提&#xff0c;在工业领域中&#xff0c;部分工业原料具有易燃、易爆、腐蚀、有毒有害等不同的危险特性&#xff0c;对于这些原材料的运输、储存、加工等行为&#xff0c;都需要遵循严格的安全规章制度。 针对危化品的仓储安全监测和管理&#xff0c;可…

STM32——外部中断

文章目录 0.中断关系映射1.使能 IO 口时钟&#xff0c;初始化 IO 口为输入2.设置 IO 口模式&#xff0c;触发条件&#xff0c;开启 SYSCFG 时钟&#xff0c;设置 IO 口与中断线的映射关系。3.配置NVIC优先级管理&#xff0c;并使能中断4.编写中断服务函数。5.编写中断处理回调函…

朋友圈为什么会折叠?

你是不是也经常刷到被折叠成一行的朋友圈&#xff1f; 你是不是也担心自己发的朋友圈被折叠&#xff1f; 今天桔子分享你5个实用技巧&#xff0c;有效放折叠&#xff01; 朋友圈折叠&#xff0c;原因可能是多方面的&#xff1a; 1、有min感词内容 比如一些促xiao、优hui、单品…

三十岁,顺丰带着理性和智慧“折腾”不止

5月出售丰网&#xff0c;7月补充收购嘉里物流旗下的附属的快递公司&#xff0c;8月明确赴港上市&#xff0c;9月43架全货机航线成功转场鄂州花湖机场这个“新家”——顺丰度过了忙碌的大半年&#xff0c;恰如“三十而立”的业务骨干&#xff0c;在过完生日后马不停蹄地投身工作…