Skip to content

Commit a17c3dc

Browse files
authored
Update 数据结构.md
1 parent 645ebfe commit a17c3dc

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

数据结构.md

+30-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public int min() {
4949
问题描述:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
5050
```
5151
```
52-
解析:largestRectangleArea()为标准的单调栈函数,栈底到栈顶按照从小到大的顺序,若是要入栈的元素小于栈顶元素,让其直接入栈就会破坏单调结构,因此逐个出现直至待入栈元素能够入栈。而一个元素出栈的时候,让其出栈的元素就是其右边界,出栈后栈顶元素为其左边界。
52+
解析:largestRectangleArea()为标准的单调栈函数,栈底到栈顶按照从小到大的顺序,若是要入栈的元素小于栈顶元素,让其直接入栈就会破坏单调结构,因此逐个出栈直至待入栈元素能够入栈。而一个元素出栈的时候,让其出栈的元素就是其右边界,出栈后栈顶元素为其左边界。
5353
```
5454
```java
5555
public int maximalRectangle(char[][] map) {
@@ -86,6 +86,34 @@ public int largestRectangleArea(int[] heights) {
8686
return res;
8787
}
8888
```
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+
```
89117
# 优先级队列
90118
## *.数据流中的中位数
91119
```
@@ -148,4 +176,4 @@ public ArrayList<Integer> maxInWindows(int [] num, int size){
148176
}
149177
return res;
150178
}
151-
```
179+
```

0 commit comments

Comments
 (0)