42. Trapping Rain Water

Two pointers problem

1 左右夹逼
2 height[l]<=height[r]
更新maxleft
算出当前可以盛水的大小(计算高度即可,因为宽度为1):maxleft-height[l]
可以盛水的大小取决于左右两边比较矮的一方与当前高度的差
*假设右边的柱子都比左边高?为什么呢?
*因为落入这个判断条件都是height[l]<=height[r]

3,height[l]>height[r]
更新maxright
算出当前可以盛水的大小: maxright-height[r]
*此时左边的柱子都比右边所有的高,height[l] > all right from r

#define max(a,b) (a>b?a:b)
int trap(int* height, int heightSize) {
    int l = 0;
    int r = heightSize - 1;
    int maxleft = 0;
    int maxright = 0;
    int ans = 0;
    while(l

你可能感兴趣的:(42. Trapping Rain Water)