当前位置: 首页 > news >正文

力扣 42. 接雨水

题目来源:https://leetcode.cn/problems/trapping-rain-water/description/

C++题解1:双指针

按列算,一列一列的求雨水面积。使用双指针是记录当前列左右侧的最大元素。

class Solution {
public:int trap(vector<int>& height) {int result = 0;int len = height.size();vector<int> leh(len, 0), rih(len, 0);leh[0] = 0;rih[len-1] = 0;for(int i = 0; i < len; i++) {if(i + 1 < len) {leh[i+1] = max(leh[i], height[i]);}if(len-i-2 >= 0){rih[len-i-2] = max(rih[len-i-1], height[len-i-1]);}}for(int i = 0; i < len; i++) {int tmp = min(leh[i], rih[i]);if(tmp > height[i]) result = result + tmp - height[i];}return result;}
};

C++题解2:单调栈(注意:栈存放元素索引就可以直接找到元素值)

按行算,横向算法。用单调栈可以求单前列右侧大的元素值。

当height[i]比st.top()所在元素值大时,如果st弹出一个元素后不是空栈,那么说明一定有凹槽(能装雨水)。因为栈里存放的是索引,所以可以求出横向有多长(即上面箭头的长度);再比较一下height[i]与新的height[st.top()]的长短,可以求出纵向有多长;相乘即可求出箭头所在位置蓝色面积。

class Solution {
public:int trap(vector<int>& height) {int len = height.size();if(len <= 2) return 0;stack<int> st;int result = 0;for(int i = 0; i < len; i++) {while(!st.empty() && height[i] > height[st.top()]) {int tmp = st.top();st.pop();if(!st.empty()) {result += (min(height[i], height[st.top()]) - height[tmp]) * (i - st.top() - 1);}}st.push(i);}return result;}
};

http://www.lryc.cn/news/369276.html

相关文章:

  • Elastic Platform 8.14:ES|QL 正式发布、静态加密和向量搜索优化
  • UE4获取动画序列资产的动画时长
  • win10怎么截图?电脑截图的3个方法分享
  • 无线领夹麦克风哪个品牌性价比高?推荐领夹麦克风性价比最高品牌
  • C语言----深入理解指针(5)
  • Ansible——cron模块
  • 保存图片奇怪的bug
  • 【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
  • 【机器人和人工智能——自主巡航赛项】进阶篇
  • [大师C语言(第二十五篇)]C语言字符串探秘
  • xLua(一) 环境安装笔记
  • Python基础教程(十一):数据结构汇总梳理
  • 制造型企业图纸泄露问题,如何从根源解决核心文件资料泄露问题?
  • 英伟达最新GPU和互联路线图分析
  • Github 2024-06-10 开源项目日报 Top10
  • 前后端分离项目中Spring Boot返回的时间与前端相差8个小时
  • stm32MP135裸机编程:使用USB/UART烧录程序到SD卡并从SD卡启动点亮一颗LED灯
  • 【NoSQL数据库】Redis Cluster集群(含redis集群扩容脚本)
  • 重邮计算机网络803-(2)物理层
  • uniapp使用webview内嵌H5的注意事项
  • 现代 C++的高效并发编程模式
  • 汇编语言作业(五)
  • 收音机的原理笔记
  • 排序算法案例
  • 时间序列评价指标
  • Docker:安装 Orion-Visor 服务器运维的技术指南
  • HarmonyOS Next 系列之底部标签栏TabBar实现(三)
  • mac怎么录制屏幕?这2个方法你值得拥有
  • 爱德华三坐标软件ACdmis.AC-dmis密码注册机
  • 计算机网络 期末复习(谢希仁版本)第3章