A difficulty lies not in logic programming and algorithm problems, more like Riddles
Moves the pointer to the middle of the two right and left sides, while maintaining both the maximum
class Solution { public int trap(int[] height) { if (height==null||height.length < 3) { return 0; // impossible to contain water in this situation } int left = 0; //initiate left pointer int right = height.length - 1; //initiate right pointer int leftMax = height[left]; //the bound in left int rightMax = height[right];//the bound in right int res = 0; while (left < right) { if (height[left] <= height[right]) { if (height[left] > leftMax) { leftMax = height[left++]; } else { res += leftMax - height[left++]; } } else { if (height[right] > rightMax) { rightMax = height[right--]; } else { res += rightMax - height[right--]; } } } return res; } }
time: O (n)
space: O(1)