本篇文章来总结两个「接雨水」的问题!!
我一开始直接暴力,感觉方法很蠢!其实可以用双指针高效的解决这类问题,关于双指针相关内容可见 双指针技巧秒杀七道数组/链表题目
题目详情可见 盛最多水的容器
定义两个指针,一个指向数组的开头,一个指向数组的结尾。如何移动指针才能使我们可以更加逼近最优解??
当然是移动两个里面高度更小的指针
public int maxArea(int[] height) {    int l = 0, r = height.length - 1;    int ans = 0;    while (l <= r) {        int area = Math.min(height[l], height[r]) * (r - l);        ans = Math.max(ans, area);        if (height[l] < height[r]) l++;        else r--;    }    return ans;}题目详情可见 接雨水
这个题目也差不多,我们需要维护一个高度h,表示能使水不流走的最大高度!!
在使用双指针收缩区间的时候,不断的更新该高度h
xxxxxxxxxxpublic int trap(int[] height) {    int h = 0, ans = 0;    int l = 0, r = height.length - 1;    while (l <= r) {        if (height[l] < height[r]) {            h = Math.max(h, height[l]);            ans += h - height[l];            l++;        } else {            h = Math.max(h, height[r]);            ans += h - height[r];            r--;        }    }    return ans;}