水可以存储的情况只有当左边最高的和右边最高的两者中的最小值大于当前高度。
故可以用两个数组分别存储两边最高值。
class Solution { public: int trap(vector<int>& height) { vector<int> lefthigh; vector<int> righthigh(height.size()); int max=0,sum=0; for(int i=0;i<height.size();i++) { lefthigh.push_back(max); max=max>height[i]?max:height[i]; } max=0; for(int j=height.size()-1;j>=0;j--) { righthigh[j]=max; max=max>height[j]?max:height[j]; } for(int k=0;k<height.size();k++) { int len=min(lefthigh[k],righthigh[k])-height[k]; if(len>0) sum+=len; } return sum; } };