Skip to content

199 Max Water Trapped I (Lai)

Given a non-negative integer array representing the heights of a list of adjacent bars. Suppose each bar has a width of 1. Find the largest amount of water that can be trapped in the histogram.

Assumptions

  • The given array is not null

Examples

  • { 2, 1, 3, 2, 4 }, the amount of water can be trapped is 1 + 1 = 2 (at index 1, 1 unit of water can be trapped and index 3, 1 unit of water can be trapped)

Solution:

public class Solution {
  public int maxTrapped(int[] array) {
    // Write your solution here
    if (array == null || array.length <= 2){
      return 0;
    }
    int left = 0;
    int right = array.length -1;
    int lmax = array[left];
    int rmax = array[right];

    int result = 0;
    while(left < right){
      if (array[left] <= array[right]){
        result = result + Math.max(0, lmax - array[left]);
        lmax = Math.max(lmax, array[left]);
        left++;
      }else{
        result = result + Math.max(0, rmax - array[right]);
        rmax = Math.max(rmax, array[right]);
        right--;
      }
    }
    return result;
  }
}

// TC: O(n)
// SC: O(1)