Leetcode 42 接雨水
题目描述:
题解:(一开始的时候一直没有梳理清楚) 有凹槽的地方势必左,右都有比其高的柱子。这里只需要知道当前点左边max以及右边max的柱子高度就可以求出当前位置能蓄多少水。
之前一直在梳理怎么顺序的去处理,思路出了问题。太麻烦的处理一般都不是正解,果然换个思路清晰了很多。
ac代码:
int trap(vector<int>& height) { int ans = 0; int Len = height.size(); int pre[Len+10]; int back[Len+10]; for(int i=0;i<=Len;i++) { pre[i] = 0; back[i] = 0; } int mx = 0; for(int i=0;i<Len;i++) { mx = max(mx,height[i]); pre[i] = mx; } mx = 0; for(int i=Len-1;i>=0;i--) { mx = max(mx,height[i]); back[i] = mx; } for(int i=1;i<Len-1;i++) { int tmp = min(pre[i-1],back[i+1]); if(height[i] < tmp) ans+=(tmp - height[i]); } return ans; }