1、超时双指针做法
class Solution {
public:
int trap(vector<int>& height) {
int thesize=height.size();
int cnt=0,l=0,r=thesize-1;
while(l<r)
{
while(l<r&&height[l]==0) ++l;
while(l<r&&height[r]==0) --r;
if(l>=r) break;
for(int j=l;j<=r;++j)
{
if(height[j]==0) ++cnt;
else --height[j];
}
}
return cnt;
}
};
2、空间换时间,哈希表+双指针做法
class Solution {
public:
int trap(vector<int>& height) {
int thesize=height.size();
int cnt=0,l=0,r=thesize-1,t=0;
int hash[100001]={0};
for(int i=0;i<thesize;++i) ++hash[height[i]];
while(l<r)
{
while(l<r&&height[l]<=t)
{
--hash[t];
++l;
}
while(l<r&&height[r]<=t)
{
--hash[t];
--r;
}
if(l>=r) break;
cnt+=hash[t];
++t;
hash[t]+=hash[t-1];
}
return cnt;
}
};