BackhardTwo PointersUberCred

Bounded Range Segment Calculator 3 Solution

Problem Statement

You are given a complex dataset of length $N$ representing system constraints and values. Your task is to calculate the bounded range segment using the Container With Most Water methodology.

Example 1
Input
[8, 6, 3, 1, 5, 4, 2]
Output
32

Explanation: Step-by-step: with input [8, 6, 3, 1, 5, 4, 2], we initialize two pointers at the start and end of the array. The area between the two pointers [8, 6] is 24. We move the pointer with the larger height (8) towards the other pointer, giving us the new pointers [8, 3]. The area between the new pointers [8, 3] is 24. We move the pointer with the larger height (8) towards the other pointer, giving us the new pointers [8, 1]. The area between the new pointers [8, 1] is 8. We move the pointer with the larger height (8) towards the other pointer, giving us the new pointers [5, 1]. The area between the new pointers [5, 1] is 5. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 4]. The area between the new pointers [5, 4] is 20. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 2]. The area between the new pointers [5, 2] is 10. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [4, 2]. The area between the new pointers [4, 2] is 8. We move the pointer with the larger height (4) towards the other pointer, giving us the new pointers [4, 2]. The area between the new pointers [4, 2] is 8. The maximum area is 32.

Example 2
Input
[3, 2, 1, 5, 4, 6]
Output
18

Explanation: Step-by-step: with input [3, 2, 1, 5, 4, 6], we initialize two pointers at the start and end of the array. The area between the two pointers [3, 2] is 6. We move the pointer with the larger height (3) towards the other pointer, giving us the new pointers [3, 1]. The area between the new pointers [3, 1] is 3. We move the pointer with the larger height (3) towards the other pointer, giving us the new pointers [5, 1]. The area between the new pointers [5, 1] is 5. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 4]. The area between the new pointers [5, 4] is 20. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 6]. The area between the new pointers [5, 6] is 30. The maximum area is 30, but we move the pointer with the larger height (6) towards the other pointer, giving us the new pointers [5, 6]. The area between the new pointers [5, 6] is 30. The maximum area is 30.

Constraints

  • 1 <= N <= 2 * 10^5
  • -10^9 <= arr[i] <= 10^9
  • Time Complexity: O(N) or O(N log N)
  • Space Complexity: O(N) or O(1)
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Bounded Range Segment Calculator 3 — Problem Statement & Solution Guide

Two PointersHardContainer With Most Water
TimeO(N)
|
SpaceO(1)

Problem Description

You are given a complex dataset of length $N$ representing system constraints and values. Your task is to calculate the bounded range segment using the **Container With Most Water** methodology.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Bounded Range Segment Calculator 3"

hard

WHY DOES IT MATTER?

Two‑pointer patterns turn quadratic pairwise problems into linear scans, a critical skill for scaling algorithms in high‑throughput systems where input sizes can reach millions.

OPTIMIZATION CHALLENGE

The key insight is that the area is bounded by the minimum height; therefore, discarding the taller side cannot improve the result, allowing us to safely eliminate O(N) candidates in each step.

REAL-WORLD CONNECTION

Think of two servers at opposite ends of a data center rack; the bandwidth between them is limited by the weaker link and the physical distance. Optimizing placement mirrors moving the weaker server inward to discover a stronger connection while reducing cable length.

During an interview, write the two‑pointer loop first, then immediately add the area calculation and pointer‑movement logic; this keeps the solution concise and avoids off‑by‑one errors.

COMPLEXITY AT A GLANCE

⏱ Time:O(N)
💾 Space:O(1)

Core Theory — Why This Approach?

The Bounded Range Segment Calculator 3 is a direct application of the classic "Container With Most Water" problem, which can be modeled as finding two indices i and j (i < j) in an array of heights such that the area defined by min(height[i], height[j]) * (j - i) is maximized. A naive O(N²) scan evaluates every pair, but this quickly becomes infeasible for N up to 10⁶ because the number of comparisons grows quadratically, leading to timeouts and excessive CPU usage. The optimal paradigm leverages a two‑pointer technique: start with pointers at both ends of the array and iteratively move the pointer at the shorter height inward, because any potential larger area must involve a taller line to compensate for the reduced width. This greedy contraction guarantees that every possible maximal container is examined exactly once, delivering an O(N) linear scan with O(1) auxiliary space.

Interview Questions on This Problem

Q1How does the two‑pointer approach guarantee that we never miss the optimal container when solving the Bounded Range Segment Calculator 3?

Because the area is limited by the shorter of the two lines, moving the longer line's pointer cannot increase the area; only moving the shorter line's pointer might find a taller line that compensates for the reduced width, ensuring all viable candidates are examined.

Q2If the input array contains duplicate heights, does the two‑pointer algorithm need any modification to still run in O(N)?

No modification is required; duplicate heights are handled naturally—when heights are equal, either pointer can be moved inward, and the algorithm still processes each index at most once, preserving linear time.

Q3Explain how you would adapt the container algorithm to return the actual indices of the optimal segment instead of just the maximum area.

Maintain two variables, bestArea and bestPair; each time a larger area is computed, update bestArea and store the current left and right pointer indices in bestPair. After the loop, return bestPair alongside bestArea.

Examples

Example 1

Input

[8, 6, 3, 1, 5, 4, 2]

Output

32

Explanation: Step-by-step: with input [8, 6, 3, 1, 5, 4, 2], we initialize two pointers at the start and end of the array. The area between the two pointers [8, 6] is 24. We move the pointer with the larger height (8) towards the other pointer, giving us the new pointers [8, 3]. The area between the new pointers [8, 3] is 24. We move the pointer with the larger height (8) towards the other pointer, giving us the new pointers [8, 1]. The area between the new pointers [8, 1] is 8. We move the pointer with the larger height (8) towards the other pointer, giving us the new pointers [5, 1]. The area between the new pointers [5, 1] is 5. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 4]. The area between the new pointers [5, 4] is 20. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 2]. The area between the new pointers [5, 2] is 10. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [4, 2]. The area between the new pointers [4, 2] is 8. We move the pointer with the larger height (4) towards the other pointer, giving us the new pointers [4, 2]. The area between the new pointers [4, 2] is 8. The maximum area is 32.

Example 2

Input

[3, 2, 1, 5, 4, 6]

Output

18

Explanation: Step-by-step: with input [3, 2, 1, 5, 4, 6], we initialize two pointers at the start and end of the array. The area between the two pointers [3, 2] is 6. We move the pointer with the larger height (3) towards the other pointer, giving us the new pointers [3, 1]. The area between the new pointers [3, 1] is 3. We move the pointer with the larger height (3) towards the other pointer, giving us the new pointers [5, 1]. The area between the new pointers [5, 1] is 5. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 4]. The area between the new pointers [5, 4] is 20. We move the pointer with the larger height (5) towards the other pointer, giving us the new pointers [5, 6]. The area between the new pointers [5, 6] is 30. The maximum area is 30, but we move the pointer with the larger height (6) towards the other pointer, giving us the new pointers [5, 6]. The area between the new pointers [5, 6] is 30. The maximum area is 30.

Constraints

  • 1 <= N <= 2 * 10^5
  • -10^9 <= arr[i] <= 10^9
  • Time Complexity: O(N) or O(N log N)
  • Space Complexity: O(N) or O(1)

Optimal Approach & Strategy

Initialize left = 0, right = N‑1; while left < right, compute area, update max, then move the pointer at the smaller height inward.

Brute Force Approach

Iterate over all i < j, compute min(height[i], height[j]) * (j - i) for each pair, and track the maximum.

Verified Code Solutions

JavaScript Solution
Time: O(N)
function solution(nums) {
   let left = 0;
   let right = nums.length - 1;
   let maxArea = 0;
   while (left < right) {
       let area = Math.min(nums[left], nums[right]) * (right - left);
       maxArea = Math.max(maxArea, area);
       if (nums[left] < nums[right]) {
           left++;
       } else {
           right--;
       }
   }
   return maxArea;
}

Asked in Top Tech Interviews

UberCred

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.