(多图预警)这就是那个著名的接雨水
苦逼的码农
共 3026字,需浏览 7分钟
·
2020-11-30 22:23
接雨水
示例 1:
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
示例 2:
输入:height = [4,2,0,3,2,5]
输出:9
示例3:
输入:[4,3,2,0,1,1,5]
输出:13
说明:上面是由数组 [4,3,2,0,1,1,5]表示的高度图,在这种情况下,可以接 13个单位的雨水(见下图)。
题目解析:
题目代码:
class Solution {
public int trap(int[] height) {
Stackstack = new Stack ();
int water = 0;
//特殊情况
if(height.length < 3){
return 0;
}
for(int i = 0; i < height.length; i++){
while(!stack.isEmpty() && height[i] > height[stack.peek()])
//栈顶元素
int popnum = stack.pop();
//相同元素的情况例1,1
while(!stack.isEmpty()&&height[popnum] == height[stack.peek()]){
stack.pop();
}
//计算该层的水的单位
if(!stack.isEmpty()){
int temp = height[stack.peek()];//栈顶元素值
//高
int hig = Math.min(temp-height[popnum],height[i]-height[popnum]);
//宽
int wid = i-stack.peek()-1;
water += hig * wid;
}
}
//这里入栈的是索引
stack.push(i);
}
return water;
}
}
这个题解的图片太多了,整了挺久,因为怕浪费了这道经典题,所以画了很多图片进行说明,希望可以帮到大家。下周就是字符串啦,大家加油啊!
文章整体目录
如何获取
很简单,在我的微信公众号 帅地玩编程 回复 程序员内功修炼 即可获取《程序员内功修炼》第一版和第二版的 PDF。
推荐,推荐一个 GitHub,这个 GitHub 整理了几百本常用技术PDF,绝大部分核心的技术书籍都可以在这里找到,GitHub地址:https://github.com/iamshuaidi/CS-Book(电脑打开体验更好),地址阅读原文直达
评论