pull/10/head
chefyuan 2021-03-20 13:43:55 +08:00
parent 0ae38e3d73
commit 69b3434d70
1 changed files with 7 additions and 7 deletions

View File

@ -33,7 +33,7 @@
看了上面的示例刚开始刷题的同学可能有些懵逼那我们结合图片来理解一下我们就用示例3的例子进行举例他的雨水到底代表的是什么。
![image-20201112163703501](C:\Users\ybj\AppData\Roaming\Typora\typora-user-images\image-20201112163703501.png)
![](https://img-blog.csdnimg.cn/2021032013412768.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODg1OTI0,size_16,color_FFFFFF,t_70)
@ -43,33 +43,33 @@
这里我们也系统的说一下单调栈单调栈含义就是栈内的元素是单调的我们这两个题目用到的都是递减栈相同也可以我们依次将元素压入栈如果当前元素小于等于栈顶元素则入栈如果大于栈顶元素则先将栈顶不断出栈直到当前元素小于或等于栈顶元素为止然后再将当前元素入栈。就比如下图的4想入栈的话则需要23出栈之后才能入栈因为4大于他俩。
![image-20201112165115306](C:\Users\ybj\AppData\Roaming\Typora\typora-user-images\image-20201112165115306.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320134154434.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODg1OTI0,size_16,color_FFFFFF,t_70)
我们了解单调栈的含义下面我们来看一下接雨水问题到底该怎么做其实原理也很简单我们通过我们的例3来进行说明。
首先我们依次入栈4320我们的数组前四个元素是符合单调栈规则的。但是我们的第五个1是大于0的。那我们就需要0出栈1入栈。但是我们这样做是为了什么呢有什么意义呢别急我们来看下图。
![image-20201112165745965](C:\Users\ybj\AppData\Roaming\Typora\typora-user-images\image-20201112165745965.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320134213324.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODg1OTI0,size_16,color_FFFFFF,t_70)
上图我们的4320已经入栈了我们的另一个元素为1栈顶元素为0栈顶下的元素为2。那么我们在这一层接到的雨水数量怎么算呢201这三个元素可以接住的水为一个单位(见下图)这是我们第一层接到水的数量。
注:能接到水的情况,肯定是中间低两边高,这样才可以。
![image-20201112170019593](C:\Users\ybj\AppData\Roaming\Typora\typora-user-images\image-20201112170019593.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320134228696.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODg1OTI0,size_16,color_FFFFFF,t_70)
因为我们需要维护一个单调栈所以我们则需要将0出栈1入栈那么此时栈内元素为4321。下一位元素为1我们入栈此时栈内元素为43211。下一元素为5栈顶元素为1栈顶的下一元素仍为1则需要再下一个元素为2那我们求当前层接到的水的数量。
![image-20201112171631818](C:\Users\ybj\AppData\Roaming\Typora\typora-user-images\image-20201112171631818.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320134249605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODg1OTI0,size_16,color_FFFFFF,t_70)
我们是通过2115这四个元素求得第二层的接水数为1*3=3;1是因为min(2-1,5-1)=min(1,4)得来的大家可以思考一下木桶效应。装水的多少肯定是按最短的那个木板来的所以高度为13的话是因为5的索引为62的索引为2他们之间共有三个元素345也就是3个单位。所以为6-2-1=3。
将1出栈之后我们栈顶元素就变成了2下一元素变成了3那么325这三个元素同样也可以接到水。
![image-20201112172422535](C:\Users\ybj\AppData\Roaming\Typora\typora-user-images\image-20201112172422535.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320134307389.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODg1OTI0,size_16,color_FFFFFF,t_70)
这是第三层的接水情况能够接到4个单位的水下面我们继续出栈2那么我们的435仍然可以接到水啊。
![image-20201112172634430](C:\Users\ybj\AppData\Roaming\Typora\typora-user-images\image-20201112172634430.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320134319646.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzODg1OTI0,size_16,color_FFFFFF,t_70)
这是我们第四层接水的情况一共能够接到5个单位的水那么我们总的接水数加起来那就是