42. Trapping Rain Water via Java

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)

Guess you like

Origin www.cnblogs.com/zg1005/p/11918606.html