11. Container With Most Water
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.
Similar: 42. Trapping Rain Water
1 public class Solution { 2 public int maxArea(int[] height) { 3 if (height.length < 2) return 0; 4 int l = 0, r = height.length-1; 5 int max = 0; 6 while (l < r) { 7 int lomax = height[l]; 8 int himax = height[r]; 9 max = Math.max(max, (r - l) * (lomax < himax ? lomax : himax)); 10 11 if (height[l] < height[r]) 12 while (l < r && height[l] <= lomax) l++; // will change l at least one step 13 else while (l < r && height[r] <= himax) r--; 14 } 15 16 return max; 17 } 18 }