11. Container With Most Water (Medium)
https://leetcode.com/problems/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 and n is at least 2.
The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.
Example:
Input: [1,8,6,2,5,4,8,3,7] Output: 49
Solutions
class Solution {
// Note
// 1. All neighboring slabs are separated at equal space.
// 2. After choosing two slabs, you can assume other slabs are removed when holding water, different from
// https://leetcode.com/problems/trapping-rain-water/
public int maxArea(int[] height) {
int len = height.length;
if (height == null || len == 0) {
return 0;
}
// left and right pointer
int lptr = 0;
int rptr = len - 1;
int ans = 0;
// Narrow your search from both sides
while (lptr < rptr) {
int shortestSlab = Math.min(height[lptr], height[rptr]);
int area = (rptr - lptr) * shortestSlab;
if (area > ans) {
ans = area;
}
if (height[lptr] < height[rptr]) {
lptr++;
} else {
rptr--;
}
}
return ans;
}
}