力扣-单调栈-42 接雨水

news/2025/3/11 1:12:35/

思路和时间复杂度

  1. 思路:找到最左侧,比它大的元素,然后找到最右侧比它的元素,初始化了两个left和right作为当前元素左边和右边第一个比它大的元素,然后遍历时,不断寻找左右两侧的最高点,选择二者较低的减去自身高度作为高度
  2. 时间复杂度: O(n)      

两个数组的建立是O(n),然后遍历求当前雨水高度时,如果呈现U字形,在底部正中央需要遍历所有元素,在偏离两侧的节点中,会逐渐减少,应该是小于O(n^2)

代码

class Solution {
public:int trap(vector<int>& height) {vector<int> right(height.size(), -1);vector<int> left(height.size(), -1);stack<int> st;st.push(0);for(int i = 1; i < height.size(); i++){if(height[i] <= height[st.top()]){st.push(i);}else{while(!st.empty() && height[i] > height[st.top()]){right[st.top()] = i;st.pop();}st.push(i);}}st = stack<int>();st.push(height.size()-1);for(int i = height.size()-2; i >= 0; i--){if(height[i] <= height[st.top()]){st.push(i);}else{while(!st.empty() && height[i] > height[st.top()]){left[st.top()] = i;st.pop();}st.push(i);}}int res = 0;for(int i = 0; i < height.size(); i++){if(left[i] == -1 || right[i] == -1)continue;int leftIndex = left[i];int rightIndex = right[i];while (left[leftIndex] != -1)leftIndex = left[leftIndex];while (right[rightIndex] != -1)rightIndex = right[rightIndex];int curHeight = min(height[leftIndex], height[rightIndex]);res += curHeight - height[i];}return res;}
};


http://www.ppmy.cn/news/1578216.html

相关文章

推荐一个好用的在线文本对比网站 - diffchecker

推荐网址&#xff1a;https://www.diffchecker.com UI设计也很不错&#xff0c;响应也很快&#xff0c;广告少 生成的对比还可以生成在线链接&#xff1a;&#xff08;点击右上角“分享”&#xff09; 可设置过期时间等 我生成的示例&#xff1a;https://www.diffchecker.c…

【江协科技STM32】ADC数模转换器-学习笔记

ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁&#xff0c;ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…

ComfyUI新手使用教程

一、安装与配置 1. 安装步骤 Windows系统&#xff1a; 下载秋叶整合包&#xff08;推荐新手使用&#xff09;&#xff0c;解压至本地目录。运行启动器&#xff08;如A绘图启动器.exe&#xff09;&#xff0c;设置语言和模型路径。将模型文件&#xff08;如.safetensors或.ckpt…

Django工程获取请求参数的几种方式

在 Django 中获取请求参数的完整方法如下&#xff1a; 一、GET 请求参数获取 def view_func(request):# 获取单个参数&#xff08;推荐方式&#xff09;name request.GET.get(name, default) # 带默认值age request.GET.get(age, 0)# 获取多个同名参数&#xff08;如复选框…

电力杆塔倾斜监测装置:守护电网安全的智能卫士

​ ​电力杆塔作为电力传输的重要支撑结构&#xff0c;其安全性直接关系到电网的稳定运行和电力供应的可靠性。然而&#xff0c;由于自然环境的复杂性和外部因素的影响&#xff0c;杆塔倾斜、倒塌等问题时有发生&#xff0c;给电力系统带来了巨大的安全隐患。为了应对这一挑…

无线网络安全技术的现状及研究

摘要&#xff1a;本文对当前无线网络安全技术进行了全面探讨。首先&#xff0c;论文介绍了无线网络的特点和应用场景&#xff0c;指出无线网络面临的安全挑战&#xff0c;如数据泄露、身份伪造等问题。随后&#xff0c;论文详细分析了目前常用的无线网络安全技术&#xff0c;包…

【STM32】STM32系列产品以及新手入门的STM32F103

&#x1f4e2; STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU&#xff0c;适用于工业、汽车、消费电子等领域&#xff1b;基于 ARM Cortex-M3&#xff0c;主频最高 72MHz&#xff0c;支持 512KB Flash、64KB SRAM&#xff0c;适合复杂嵌入式应用&#xff0c;提供丰富的…

【面试秘籍】未岚大陆C++一面,带答案!

1. fork和exec是怎么实现的&#xff1f; fork 和 exec 是 Linux 中实现进程创建和执行新程序的两种系统调用。 fork 会创建一个新的进程&#xff0c;这个进程是当前进程&#xff08;父进程&#xff09;的副本。新进程&#xff08;子进程&#xff09;会继承父进程的资源&#…