42. 接雨水(单调栈)

410 阅读1分钟

public  int trap(int[] height) {
        int ans = 0;
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < height.length; i++) {
            int last = 0;
            while (!stack.isEmpty() && height[stack.peek()] <= height[i]) {
                int t = stack.pop();
                ans += (i - t - 1) * (height[t] - last);
                last = height[t];
            }
            if(!stack.isEmpty()) ans += (i - stack.peek() - 1) * (height[i] - last);
            stack.push(i);
        }
        return ans;
    }