Update 0042.接雨水.md

增加Java 单调栈实现
This commit is contained in:
hailincai
2021-09-05 08:32:17 -04:00
committed by GitHub
parent 2c27288ee7
commit ac71ac43bc

View File

@ -391,6 +391,7 @@ class Solution {
}
}
```
动态规划法
```java
class Solution {
@ -418,6 +419,52 @@ class Solution {
}
}
```
单调栈法
```java
public int trapMonoStack(int[] height){
int size = height.length;
if (size <= 2) return 0;
// in the stack, we push the index of array
// using height[] to access the real height
Stack<Integer> stack = new Stack<Integer>();
stack.push(0);
int sum = 0;
for (int index = 1; index < size; index++){
int stackTop = stack.peek();
if (height[index] < height[stackTop]){
stack.push(index);
}else if (height[index] == height[stackTop]){
// 因为相等的相邻墙左边一个是不可能存放雨水的所以pop左边的index, push当前的index
stack.pop();
stack.push(index);
}else{
//pop up all lower value
int heightAtIdx = height[index];
while (!stack.isEmpty() && (heightAtIdx > height[stackTop])){
int mid = stack.pop();
if (!stack.isEmpty()){
int left = stack.peek();
int h = Math.min(height[left], height[index]) - height[mid];
int w = index - left - 1;
int hold = h * w;
if (hold > 0) sum += hold;
stackTop = stack.peek();
}
}
stack.push(index);
}
}
return sum;
}
```
Python:
双指针法