这道题我一开始的思路是从左往右找寻能装水的“水坑”(也就是找先降低后升高的地方),然后再将水坑容量全部加起来,后来想想不行,因为可能中间有隔了一个坑位的两个较高柱子,这样做的话会少算两个柱子中间的水。文章来源:https://www.toymoban.com/news/detail-828291.html
后来我想到了新思路,因为之前做过类似的盛水题,是分别使用两个指针指向两端,向中间偏移,我想到这题似乎也可以这样,每次遇到高的柱子就以它为基准计算后面的盛水量,这样依次寻找出来的水坑就不会少算。文章来源地址https://www.toymoban.com/news/detail-828291.html
class Solution {
public:
int trap(vector<int>& height) {
int sum=0;
if(height.size()<3) return sum;
int x=0;
int y=height.size()-1;
int hei=min(height[x],height[y]);
sum+=hei*(height.size()-2);
while(x<y-1){
if(height[x]>height[y]){
if(height[y-1]<=hei){y--;sum-=height[y];}
else{
y--;
sum-=hei;
sum-=(y-x-1)*hei;
hei=min(height[x],height[y]);
sum+=hei*(y-x-1);
}
}
else{
if(height[x+1]<=hei){x++;sum-=height[x];}
else{
x++;
sum-=hei;
sum-=(y-x-1)*hei;
hei=min(height[x],height[y]);
sum+=hei*(y-x-1);
}
}
}
return sum;
}
};
到了这里,关于leetcode日记(32)接雨水的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!