File tree 1 file changed +30
-2
lines changed
1 file changed +30
-2
lines changed Original file line number Diff line number Diff line change @@ -49,7 +49,7 @@ public int min() {
49
49
问题描述:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
50
50
```
51
51
```
52
- 解析:largestRectangleArea()为标准的单调栈函数,栈底到栈顶按照从小到大的顺序,若是要入栈的元素小于栈顶元素,让其直接入栈就会破坏单调结构,因此逐个出现直至待入栈元素能够入栈 。而一个元素出栈的时候,让其出栈的元素就是其右边界,出栈后栈顶元素为其左边界。
52
+ 解析:largestRectangleArea()为标准的单调栈函数,栈底到栈顶按照从小到大的顺序,若是要入栈的元素小于栈顶元素,让其直接入栈就会破坏单调结构,因此逐个出栈直至待入栈元素能够入栈 。而一个元素出栈的时候,让其出栈的元素就是其右边界,出栈后栈顶元素为其左边界。
53
53
```
54
54
``` java
55
55
public int maximalRectangle(char [][] map) {
@@ -86,6 +86,34 @@ public int largestRectangleArea(int[] heights) {
86
86
return res;
87
87
}
88
88
```
89
+ ## 42. 接雨水
90
+ ```
91
+ 问题描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
92
+ ```
93
+ ```
94
+ 解析:该题目为单调栈的变体,栈底到栈顶按照从大到小的顺序,若是要入栈的元素小于栈顶元素,让其直接入栈就会破坏单调结构,因此逐个出栈直至待入栈元素能够入栈。而一个元素出栈的时候,让其出栈的元素就是其右边界,出栈后栈顶元素为其左边界,计算面积高为左右边界较小者,长度为左右边界的距离。
95
+ ```
96
+ ``` java
97
+ public int trap(int [] height) {
98
+ if (height == null || height. length <= 2 )return 0 ;
99
+ Stack<Integer > stack = new Stack<Integer > ();
100
+ int res = 0 ;
101
+ int curIndex = 0 ;
102
+ while (curIndex < height. length){
103
+ while (! stack. isEmpty() && height[stack. peek()] < height[curIndex]){
104
+ int cur = stack. pop();
105
+ if (stack. isEmpty()){
106
+ break ;
107
+ }
108
+ int left = stack. peek();
109
+ int distance = curIndex - left - 1 ;
110
+ res += distance * (Math . min(height[curIndex], height[left])- height[cur]);
111
+ }
112
+ stack. push(curIndex++ );
113
+ }
114
+ return res;
115
+ }
116
+ ```
89
117
# 优先级队列
90
118
## * .数据流中的中位数
91
119
```
@@ -148,4 +176,4 @@ public ArrayList<Integer> maxInWindows(int [] num, int size){
148
176
}
149
177
return res;
150
178
}
151
- ```
179
+ ```
You can’t perform that action at this time.
0 commit comments