Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Container With Most Water in DSA Javascript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Container With Most Water
O(n)
Understanding Time Complexity

We want to know how the time needed to find the container with the most water changes as the number of lines grows.

How does the number of operations grow when we try all pairs or use a smarter way?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


function maxArea(height) {
  let left = 0, right = height.length - 1;
  let max = 0;
  while (left < right) {
    const width = right - left;
    const area = Math.min(height[left], height[right]) * width;
    max = Math.max(max, area);
    if (height[left] < height[right]) {
      left++;
    } else {
      right--;
    }
  }
  return max;
}
    

This code finds the largest area between two lines by moving pointers inward.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The while loop that moves two pointers inward.
  • How many times: At most once per element from both ends, so about n times total.
How Execution Grows With Input

As the number of lines (n) grows, the loop runs roughly n times, checking pairs from outside to inside.

Input Size (n)Approx. Operations
10About 10 checks
100About 100 checks
1000About 1000 checks

Pattern observation: The number of operations grows linearly with input size.

Final Time Complexity

Time Complexity: O(n)

This means the time to find the max area grows in a straight line as the number of lines increases.

Common Mistake

[X] Wrong: "We must check every pair of lines, so it takes n squared time."

[OK] Correct: The two-pointer method smartly skips unnecessary pairs, so it only needs to check about n pairs, not all n².

Interview Connect

Understanding this approach shows you can find efficient solutions by reducing repeated work, a key skill in problem solving.

Self-Check

"What if we used a nested loop to check all pairs instead of two pointers? How would the time complexity change?"

Practice

(1/5)
1. What does the "Container With Most Water" problem ask you to find given an array of heights?
easy
A. The maximum area formed between two lines representing container walls.
B. The minimum height in the array.
C. The sum of all heights in the array.
D. The difference between the tallest and shortest lines.

Solution

  1. Step 1: Understand the problem statement

    The problem asks to find two lines that together with the x-axis form a container that holds the most water.
  2. Step 2: Identify what to maximize

    The area between two lines is width (distance between lines) times the height (minimum of the two lines). We want the maximum such area.
  3. Final Answer:

    The maximum area formed between two lines representing container walls. -> Option A
  4. Quick Check:

    Max area = max water container [OK]
Hint: Look for two lines maximizing min height * distance [OK]
Common Mistakes:
  • Thinking it's about sum of heights
  • Confusing max height with max area
  • Ignoring the distance between lines
2. Which of the following JavaScript code snippets correctly initializes two pointers for the Container With Most Water problem?
easy
A. let left = 1, right = heights.length;
B. let left = -1, right = heights.length + 1;
C. let left = heights.length, right = 0;
D. let left = 0, right = heights.length - 1;

Solution

  1. Step 1: Identify correct pointer initialization

    We start with left pointer at index 0 and right pointer at last index (length - 1).
  2. Step 2: Check each option

    let left = 0, right = heights.length - 1; correctly sets left = 0 and right = heights.length - 1. Others use invalid indices.
  3. Final Answer:

    let left = 0, right = heights.length - 1; -> Option D
  4. Quick Check:

    Start pointers at array ends [OK]
Hint: Start pointers at array ends: 0 and length-1 [OK]
Common Mistakes:
  • Using invalid indices outside array bounds
  • Starting both pointers at same position
  • Confusing length with last index
3. What is the output of the following JavaScript code?
function maxArea(height) {
  let left = 0, right = height.length - 1;
  let max = 0;
  while (left < right) {
    const area = Math.min(height[left], height[right]) * (right - left);
    max = Math.max(max, area);
    if (height[left] < height[right]) {
      left++;
    } else {
      right--;
    }
  }
  return max;
}

console.log(maxArea([1,8,6,2,5,4,8,3,7]));
medium
A. 56
B. 49
C. 64
D. 72

Solution

  1. Step 1: Trace the two-pointer approach

    Start with left=0 (height=1), right=8 (height=7), area = min(1,7)*8=8. Max=8.
  2. Step 2: Move pointers and update max

    Since height[left]
  3. Final Answer:

    49 -> Option B
  4. Quick Check:

    Max area for input = 49 [OK]
Hint: Move pointer at smaller height inward to find max area [OK]
Common Mistakes:
  • Calculating area incorrectly using max height
  • Not updating max area properly
  • Moving wrong pointer in the loop
4. Identify the bug in this JavaScript function for Container With Most Water:
function maxArea(height) {
  let left = 0, right = height.length - 1;
  let max = 0;
  while (left < right) {
    const area = Math.min(height[left], height[right]) * (right - left);
    max = Math.max(max, area);
    if (height[left] < height[right]) {
      left++;
    } else {
      right++;
    }
  }
  return max;
}
medium
A. The right pointer should decrement (right--) instead of increment (right++).
B. The area calculation should use max instead of min height.
C. The max variable should be initialized to Infinity.
D. The loop condition should be left < right, not left <= right.

Solution

  1. Step 1: Check pointer movement logic

    The right pointer is incorrectly incremented (right++), which moves it out of array bounds.
  2. Step 2: Correct pointer movement

    When height[left] >= height[right], right pointer should move left (right--) to find a potentially larger area.
  3. Final Answer:

    The right pointer should decrement (right--) instead of increment (right++). -> Option A
  4. Quick Check:

    Right pointer moves left to reduce width [OK]
Hint: Right pointer moves left (decrement) to find max area [OK]
Common Mistakes:
  • Using right++ instead of right--
  • Loop condition allowing left == right
  • Incorrect area calculation using max height
5. Given an array of heights, how would you modify the Container With Most Water algorithm to also return the indices of the two lines forming the container with the maximum water?
hard
A. Sort the array and return indices of the tallest two lines.
B. Return the first two indices always, as they form the max container.
C. Track indices when updating max area and return them along with max area.
D. Use a nested loop to check all pairs and return the last pair found.

Solution

  1. Step 1: Add variables to track indices

    Initialize variables to store left and right indices when max area updates.
  2. Step 2: Update indices when max area changes

    Inside the loop, when a new max area is found, save current left and right indices.
  3. Step 3: Return max area and indices

    Return an object or array containing max area and the two indices after loop ends.
  4. Final Answer:

    Track indices when updating max area and return them along with max area. -> Option C
  5. Quick Check:

    Save indices on max update for output [OK]
Hint: Save indices when max area updates during pointer moves [OK]
Common Mistakes:
  • Returning fixed indices without checking area
  • Sorting array loses original indices
  • Using nested loops increases time complexity
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard