用的是DP的解法,这道题是hard级别的,代码不多,难的应该是idea. 当前bin能接的水是和其当前的高度和min(左最大,右最大)
左最大和右最大的解法明显就是一个DP问题。
空间复杂度O(n), 时间复杂度O(3n)。
class Solution {
public:
int trap(vector<int>& height) {
if(height.size() < 3) return 0;
vector<int> max_left(height.size()); vector<int> max_right(height.size());
//边界方程
max_left[0] = 0; max_right[height.size()-1] = 0;
//状态转移方程
for(size_t i = 1; i < height.size(); i++){
max_left[i] = max(max_left[i-1], height[i-1]);
}
for(size_t i = height.size()-2; i > 0; i--){
max_right[i] = max(max_right[i+1], height[i+1]);
}
int res = 0;
for(size_t i = 0; i < height.size(); i++){
int k = min(max_right[i], max_left[i]) - height[i];
k = k >= 0 ? k:0;
res += k;
}
return res;
}
};