解题经验-42题-接雨水-单调栈

本人的滑动窗口方法,比官方暴力还慢一点,但是毕竟想出来了,构思巧妙,记录一下!

/**
* 题解:
* 1.先看隔一个的(也就是三个相邻的),从第一个开始,逐步看到最后一个;再看相隔两个的,再逐步增长到全长度
* 2.每发现一个积水处,就把它添上,再继续
* @param height
* @return
*/
public static int trap(int[] height) {
if (height == null || height.length < 3) {
return 0;
}
int ret = 0;
for (int depart = 2; depart <= height.length-1;depart++) {
for(int i=0;i<=height.length-1-depart;i++){
int end = i+depart;
int minEdge = Integer.min(height[i],height[end]);
for(int j = i;j<=end;j++){
if(height[j]<minEdge){
ret = ret + minEdge-height[j];
//发现一处,添上
height[j] = minEdge;
}
}
}
}
return ret;
}
官方值得学习的单调栈:
朴素解法 O(n^2) -> 查找优化 O(n) -> 单调栈 O(n) ... 逐步讲解完整分析思路 ~ - 接雨水 - 力扣(LeetCode) (leetcode-cn.com)

posted @ 2021-02-22 22:39  轩铭  阅读(105)  评论(0编辑  收藏  举报