11. Container With Most Water (Medium)

https://leetcode.com/problems/container-with-most-water/

Given n non-negative integers a1, a2, ..., a, 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;
    }
}

Incorrect Solutions

References

Copyright © iovi.com 2017 all right reserved,powered by GitbookLast Modification: 2020-02-25 13:29:35

results matching ""

    No results matching ""