Bird
Raised Fist0
DSA C#programming~10 mins

Container With Most Water in DSA C# - Execution Trace

Choose your learning style10 modes available
Concept Flow - Container With Most Water
Start with two pointers
↓
Calculate area between pointers
↓
Compare with max area
↓
Move pointer at shorter line inward
↓
Repeat until pointers meet
↓
Return max area found
We use two pointers at the ends of the array, calculate area, update max, then move the shorter pointer inward until they meet.
Execution Sample
DSA C#
int maxArea(int[] height) {
  int left = 0, right = height.Length - 1;
  int max = 0;
  while (left < right) {
    int area = Math.Min(height[left], height[right]) * (right - left);
    max = Math.Max(max, area);
    if (height[left] < height[right]) left++; else right--;
  }
  return max;
}
Calculates the maximum water container area by moving two pointers inward.
Execution Table
StepOperationLeft PointerRight PointerHeight[left]Height[right]WidthAreaMax AreaPointer MovedVisual State
1Initialize pointers0817800None[1,8,6,2,5,4,8,3,7]
2Calculate area0817888Left++[1,8,6,2,5,4,8,3,7]
3Calculate area188774949Right--[1,8,6,2,5,4,8,3,7]
4Calculate area178361849Right--[1,8,6,2,5,4,8,3,7]
5Calculate area168854049Right--[1,8,6,2,5,4,8,3,7]
6Calculate area158441649Right--[1,8,6,2,5,4,8,3,7]
7Calculate area148531549Right--[1,8,6,2,5,4,8,3,7]
8Calculate area13822449Right--[1,8,6,2,5,4,8,3,7]
9Calculate area12861649Right--[1,8,6,2,5,4,8,3,7]
10Calculate area11880049Pointers meet[1,8,6,2,5,4,8,3,7]
💡 Pointers meet at index 1, loop ends.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6After 7After 8After 9Final
left01111111111
right88765432111
max08494949494949494949
Key Moments - 3 Insights
Why do we move the pointer at the shorter line instead of the taller one?
Because the area is limited by the shorter line, moving the taller pointer won't increase area. See steps 2 and 3 in execution_table where left pointer moves because height[left] < height[right].
Why does the loop stop when left equals right?
When pointers meet, width becomes zero, so no container can be formed. The exit_note and step 10 in execution_table show this.
How is max area updated during the process?
At each step, area is calculated and compared with max. If larger, max updates. See max column in execution_table rows 2 and 3 where max changes from 8 to 49.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what is the max area?
A8
B18
C49
D40
💡 Hint
Check the 'Max Area' column at step 3 in execution_table.
At which step does the right pointer first move?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Look at the 'Pointer Moved' column in execution_table to see when 'Right--' first appears.
If height[left] was always greater than height[right], which pointer would move?
ARight pointer moves
BLeft pointer moves
CBoth pointers move simultaneously
DNo pointer moves
💡 Hint
Refer to the if condition in the code and pointer movement logic in execution_table.
Concept Snapshot
Container With Most Water:
- Use two pointers at array ends
- Calculate area = min(height[left], height[right]) * width
- Update max area if larger
- Move pointer at shorter height inward
- Repeat until pointers meet
- Return max area found
Full Transcript
This concept uses two pointers starting at the ends of the height array. At each step, it calculates the area formed by the lines at these pointers and the distance between them. The maximum area found is updated if the current area is larger. Then, the pointer at the shorter line moves inward to try to find a larger area. This repeats until the pointers meet, at which point the maximum area is returned.

Practice

(1/5)
1. What does the problem Container With Most Water ask you to find given an array of heights?
easy
A. The maximum area of water that can be contained between two lines.
B. The minimum height in the array.
C. The sum of all heights in the array.
D. The number of lines taller than a given height.

Solution

  1. Step 1: Understand the problem statement

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

    We calculate the area between two lines as the width times the smaller height.
  3. Final Answer:

    The maximum area of water that can be contained between two lines. -> Option A
  4. Quick Check:

    Container area = width * min(height1, height2) [OK]
Hint: Look for two lines maximizing width and height [OK]
Common Mistakes:
  • Thinking it's about sum of heights
  • Confusing maximum area with minimum height
  • Ignoring width between lines
2. Which of the following is the correct way to declare the main method in a C# program that solves the Container With Most Water problem?
easy
A. void main()
B. public static void Main(string[] args)
C. static Main()
D. public void Main(string args)

Solution

  1. Step 1: Recall C# main method syntax

    The main method must be public static void and accept string array args.
  2. Step 2: Match options with correct syntax

    public static void Main(string[] args) matches the correct signature: public static void Main(string[] args).
  3. Final Answer:

    public static void Main(string[] args) -> Option B
  4. Quick Check:

    Main method signature = public static void Main(string[] args) [OK]
Hint: Main method needs public static void with string[] args [OK]
Common Mistakes:
  • Using void main() without public static
  • Missing string array brackets
  • Incorrect parameter type
3. What is the output of the following C# code snippet?
int[] height = {1, 8, 6, 2, 5, 4, 8, 3, 7};
int maxArea = 0;
int left = 0, right = height.Length - 1;
while (left < right) {
    int area = Math.Min(height[left], height[right]) * (right - left);
    if (area > maxArea) maxArea = area;
    if (height[left] < height[right]) left++; else right--;
}
Console.WriteLine(maxArea);
medium
A. 48
B. 49
C. 56
D. 64

Solution

  1. Step 1: Understand the two-pointer approach

    Start with left=0 and right=8, calculate area and move pointers inward choosing smaller height side.
  2. Step 2: Trace key iterations

    Max area found is 49 between height[1]=8 and height[8]=7 with width 7.
  3. Step 3: Continue tracing

    However, a larger area of 56 is found between height[1]=8 and height[6]=8 with width 7.
  4. Final Answer:

    56 -> Option C
  5. Quick Check:

    Max area = 56 [OK]
Hint: Use two pointers from ends, move smaller height inward [OK]
Common Mistakes:
  • Calculating area incorrectly
  • Moving wrong pointer
  • Not updating maxArea properly
4. Identify the bug in this C# code snippet for Container With Most Water:
int maxArea = 0;
int left = 0, right = height.Length - 1;
while (left <= right) {
    int area = Math.Min(height[left], height[right]) * (right - left);
    if (area > maxArea) maxArea = area;
    if (height[left] < height[right]) left++;
    else right--;
}
return maxArea;
medium
A. maxArea should be initialized to -1 instead of 0.
B. The area calculation should use Math.Max instead of Math.Min.
C. The pointers should both move inward every iteration.
D. The loop condition should be 'left < right' instead of 'left <= right'.

Solution

  1. Step 1: Check loop condition

    Using 'left <= right' causes area calculation when left == right, width zero, unnecessary.
  2. Step 2: Correct loop condition

    Change to 'left < right' to avoid zero width calculation.
  3. Final Answer:

    The loop condition should be 'left < right' instead of 'left <= right'. -> Option D
  4. Quick Check:

    Loop must run while left < right [OK]
Hint: Loop until pointers cross, not equal [OK]
Common Mistakes:
  • Using <= causes zero width area
  • Using Math.Max instead of Math.Min for height
  • Moving both pointers each time
5. Given an array of heights, how would you modify the two-pointer approach to find the container with the second largest water area?
hard
A. Track the top two max areas during the pointer moves and return the second largest.
B. Sort the array and pick the two largest heights.
C. Use a nested loop to check all pairs and pick the second largest area.
D. Return the area of the container formed by the first and last lines.

Solution

  1. Step 1: Use two-pointer approach with tracking

    While moving pointers, keep track of the largest and second largest areas found.
  2. Step 2: Update max and second max areas properly

    When a new area is larger than max, update second max to old max, max to new area; else if area is between max and second max, update second max.
  3. Final Answer:

    Track the top two max areas during the pointer moves and return the second largest. -> Option A
  4. Quick Check:

    Track max and second max areas during iteration [OK]
Hint: Keep two max values while scanning with two pointers [OK]
Common Mistakes:
  • Sorting loses original indices and width info
  • Nested loops are inefficient
  • Returning first and last lines area only
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