Container With Most Water 2 Pointer Approach

 You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]).


Find two lines that together with the x-axis form a container, such that the container contains the most water.


Return the maximum amount of water a container can store.


Notice that you may not slant the container.


 


Example 1:



Input: height = [1,8,6,2,5,4,8,3,7]

Output: 49

Explanation: 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 2:


Input: height = [1,1]

Output: 1

 

🧠 2. Two Pointer Approach (Simple Idea)

  1. Start with two pointers:

    • Left pointer at start (i = 0)

    • Right pointer at end (j = height.length - 1)

  2. While i < j:

    • Calculate the current water area.

    • Keep track of the maximum area found.

    • Move the pointer with shorter height, because:

      • Only moving the smaller line may increase the height (and improve area).



class Solution {
    public int maxArea(int[] height) {
       
        int i = 0, j = height.length - 1;
        int maxArea = 0;

        while (i < j) {
            int h = Math.min(height[i], height[j]);
            int w = j - i;
            int area = h * w;

            maxArea = Math.max(maxArea, area);

            // Move the smaller height pointer
            if (height[i] < height[j]) {
                i++;
            } else {
                j--;
            }
        }

        return maxArea;
    }
}

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence