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

【力扣】42. 接雨水

这道题我卡了差不多1个小时,不是不会做,是不知道怎么能用栈来实现,后面看了一个博主的视频,豁然开朗,我主要的纠结点在于当指针指到7的时候,我计算出4到7的水块是2,但实际上是0,因为用栈是横向求解的,就是你横着来切一刀就行,然后掌握其原理。

先放代码吧,看不懂再看我的题解

class Solution {public int trap(int[] height) {//定义水块和int sum=0;Stack<Integer> stack=new Stack<>();int current=0;while(current<height.length){while(!stack.empty()&&height[current]>height[stack.peek()]){//获得栈顶元素的高度int h=height[stack.peek()]; stack.pop(); //出栈if(stack.empty()){break;}//计算方式int dt=current-stack.peek()-1;int min=Math.min(height[current],height[stack.peek()]);sum=sum+(min-h)*dt;}        //存放的是坐标    stack.push(current);current+=1;}return sum;}
}

题解如下:

1.首先讲一下原理,栈,用的时候注意里面存放的是单调递增的元素,从下往上看

2.过程:

根据本题来看,首先第一个height[0]入栈,指针后移,此时指针所指向的元素大于栈顶元素,所以栈顶元素出栈。height[1]入栈,指针后移,此时指针所指向的元素小于栈顶元素,height[2]入栈指针后移,height[3]>height[2],所以height[2]出栈 ,找到height[2]左边的比他大的元素,也就是栈顶元素。这个其实是已经排序好的,懂吧,然后比较左边和右边的元素,找出最小值,再减去之前出栈的元素的高度,再乘以左右两边元素之差-1,就是这样子,这个计算方法就是这样的,后面也就以此类推了。再见!祝各位刷题人happy !

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

相关文章:

  • IPETRONIK数据采集设备携手Softing Q-Vision软件致力于ADAS测试方案
  • Go语言中的指针介绍
  • 简单理解区块链
  • [尚硅谷React笔记]——第3章 React应用(基于React脚手架)
  • 《Linux 内核设计与实现》13. 虚拟文件系统
  • 2021-06-09 51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次
  • C/C++ 经典面试算法题
  • 2023年下学期《C语言》作业0x02-分支 XTU OJ 1068 1069 1070 1071 1072
  • JMeter学习第一、二、三天
  • 常用的分布式ID解决方案原理解析
  • echarts3D地图打点
  • 分布式主键算法
  • 暴力破解及验证码安全
  • 程序无法启动,提示“找不到msvcp140.dll”或“msvcp140.dll缺失报错”解决方法
  • 【Python查找算法】二分查找、线性查找、哈希查找
  • 【MySQL实战45讲-基础篇】
  • asp.net core中间件预防防止xss攻击
  • jvm概述
  • C++简单上手helloworld 以及 vscode找不到文件的可能性原因
  • 掌动智能:性能压力测试的重要性
  • kafka日志文件详解及生产常见问题总结
  • Linux-Centos中配置docker
  • IDEA-2023-jdk8 HelloWorld的实现
  • 【1++的Linux】之进程(五)
  • 用url类来访问服务器上的文件
  • 【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)
  • 24 Python的sqlite3模块
  • ARM-流水灯
  • 【虚拟机】NAT 模式下访问外网
  • React 入门笔记