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

2025年- H37-Lc145 --42. 接雨水(单调栈)--Java版

1.题目描述

在这里插入图片描述

2.思路

(1)方法一:用双指针实现
(2)方法二:用单调栈实现
1)维护一个单调递增的栈,当前遍历的元素和栈顶元素进行比较(要求遍历的元素要大于栈顶元素),否则,就将当前遍历的元素入栈。
2)如果满足了当前遍历的元素大于栈顶元素(也就是中间的mid元素),栈顶元素出栈,接下来mid的右边第一个元素成为栈顶元素。
3)计算容器的高度
4)计算容器的宽度,此处要-1。(比如横坐标是3,4,5。5-3-1=1。这边的1就是凹槽的宽度。
5)最后计算面积。

3.代码实现

import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;public class H42 {public int trap(int[] height) {Deque<Integer> dq=new LinkedList<>();int area=0;int n=height.length;int[] ans=new int[n];//存储下标索引for(int i=0;i<n;i++) {while (!dq.isEmpty()&&height[i]>height[dq.peek()]) {//1)维护一个单调递增的栈,当前遍历的元素和栈顶元素进行比较(要求遍历的元素要大于栈顶元素),否则,就将当前遍历的元素入栈。int mid=dq.pop();// 凹槽底部if(dq.isEmpty()) break;//左右寻找比当前元素小的元素。int postIndex=dq.peek(); //赋值给 dq.peek() 弹出之前保存的索引位置。//2)如果满足了当前遍历的元素大于栈顶元素(也就是中间的mid元素),栈顶元素出栈,接下来mid的右边第一个元素成为栈顶元素。//3)计算容器的高度//height[i] 是当前柱子,作为 右边界//height[postIndex] 是栈顶未弹出的元素,作为 左边界int shortHeight=Math.min(height[i],height[postIndex])-height[mid];//4)计算容器的宽度,此处要-1。(比如横坐标是3,4,5。5-3-1=1。这边的1就是凹槽的宽度。int weight=i-postIndex-1;// 5)最后计算面积。if (shortHeight > 0) {area+=shortHeight*weight;}}dq.push(i);}return area;}public static void main(String[] args){H42 test =new H42();int[] height={0,1,0,2,1,0,1,3,2,1,2,1};int res=test.trap(height);System.out.println(res);}
}
http://www.dtcms.com/a/201886.html

相关文章:

  • 01 基本介绍及Pod基础
  • Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)
  • HarmonyOS5云服务技术分享--自有账号对接AGC认证
  • Neon数据库:让Postgres更智能的选择!
  • 新兴技术与安全挑战
  • 分布式序列生成方案 : Redis Incr | 基于Redisson创建自增获取序号,每天更换一个key, key到期时间1天,用于创建订单号、快递单号
  • 《安徽日报》聚焦珈和科技AI创新:智慧虫情测报护航夏粮提质丰产
  • Visual Studio 2022 无法编译.NET 9 项目的原因和解决方法
  • HCIP实验五
  • MD编辑器推荐【Obsidian】含下载安装和实用教程
  • anaconda、miniconda、conda的关系及miniconda安装
  • 使用SQLite Studio导出/导入SQL修复损坏的数据库
  • 【笔记】与PyCharm官方沟通解决开发环境问题
  • 【Java的批量操作】
  • 一洽小程序接入说明
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究
  • NVM 安装与配置指南
  • 亿级核心表如何优雅扩展字段
  • 【QT】类A接收TCP数据并通过信号通知类B解析
  • 运行在华为云kubernetes应用接入APM服务
  • [Java实战] Docker 快速启动 Sentinel 控制台(二十八)
  • 园区无人机智能巡检项目方案
  • PDF处理控件Aspose.PDF教程:以编程方式将 PDF 导出为 JPG
  • React中使用ahooks处理业务场景
  • 使用 React PDF 构建 React.js PDF 查看器的指南
  • [特殊字符] React Fiber架构与Vue设计哲学撕逼实录
  • React+TypeScript多步骤表单:告别表单地狱的现代解决方案
  • cplex12.9 安装教程以及下载
  • 33、魔法防御术——React 19 安全攻防实战
  • React的合成事件(SyntheticEventt)