问题:https://leetcode.com/problems/trapping-rain-water/
解法有很多,但是最符合直觉的就是两端DP了,代码如下:
class Solution {
public int trap(int[] height) {
int n=height.length,ret=0;
if(height==null || n==0)
return ret;
int[] leftMax=new int[n];
leftMax[0]=height[0];
int[] rightMax=new int[n];
rightMax[n-1]=height[n-1];
for(int i=1;i<n;i++)
{
leftMax[i]=Math.max(leftMax[i-1],height[i]);
rightMax[n-i-1]=Math.max(rightMax[n-i],height[n-i-1]);
}
for(int i=0;i<n;i++)
{
ret += Math.min(leftMax[i],rightMax[i])-height[i];
}
return ret;
}
}