[LeetCode]42. Trapping Rain Water雨水填坑
这个题难点在于无法保证右边是不是有更高的墙可以保证挡住水
双指针可以解决
/* 两边指针保证,保证另外一边肯定有能挡住水的地方。 如果从一边开始,不考虑另一边,是无法保证右边肯定有挡水的墙,如果右边只都比这个值小,遍历的时候是不能增加结果的 双指针每次取较小的一方开始遍历 */ public int trap(int[] height) { if (height.length<3) return 0; int l = 0; int r = height.length-1; int res = 0; while (l<r) { int min = Math.min(height[l],height[r]); if (min==height[l]) { //从左边开始遍历,遇到更高的就退出 while (++l<r&&height[l]<=min) res+=min-height[l]; } else { while (l<--r&&height[r]<=min) res+=min-height[r]; } } return res; }