Using parentheses or braces instead of [] for slices
Confusing arrays and slices syntax
Missing type declaration in slice
3. What is the output of the following Go code snippet that implements the Container With Most Water logic?
package main
import "fmt"
func maxArea(height []int) int {
left, right := 0, len(height)-1
maxArea := 0
for left < right {
width := right - left
var h int
if height[left] < height[right] {
h = height[left]
left++
} else {
h = height[right]
right--
}
area := width * h
if area > maxArea {
maxArea = area
}
}
return maxArea
}
func main() {
heights := []int{1,8,6,2,5,4,8,3,7}
fmt.Println(maxArea(heights))
}
medium
A. 49
B. 56
C. 48
D. 64
Solution
Step 1: Understand the two-pointer approach
Start with left=0 and right=8, calculate area and move the pointer with smaller height inward.
Step 2: Trace the iterations
Initial area: min(1,7)*8=8
Move left to 1
Next area: min(8,7)*7=49
Move right to 7
Next area: min(8,3)*6=18
Move right to 6
Next area: min(8,8)*5=40
Move right to 5
Next area: min(8,4)*4=16
Move right to 4
Next area: min(8,5)*3=15
Move right to 3
Next area: min(8,2)*2=4
Move right to 2
Next area: min(8,6)*1=1
Move left to 2
Max area found is 49.
Final Answer:
49 -> Option A
Quick Check:
Max area calculated by two-pointer = 49 [OK]
Hint: Use two pointers moving inward, track max area [OK]
Common Mistakes:
Calculating area with max height instead of min
Not moving the pointer with smaller height
Confusing width calculation
4. Identify the bug in this Go function for Container With Most Water and select the fix:
func maxArea(height []int) int {
left, right := 0, len(height)-1
maxArea := 0
for left <= right {
width := right - left
var h int
if height[left] < height[right] {
h = height[left]
left++
} else {
h = height[right]
right--
}
area := width * h
if area > maxArea {
maxArea = area
}
}
return maxArea
}
medium
A. Use maxArea = area without checking if area > maxArea
B. Initialize maxArea to -1 instead of 0
C. Increment both left and right pointers inside the loop
D. Change loop condition to 'left < right' instead of 'left <= right'
Solution
Step 1: Analyze the loop condition
The loop runs while left <= right, which allows left and right to be equal, causing width to be zero or negative.
Step 2: Fix the loop condition
Changing to left < right ensures width is always positive and valid for area calculation.
Final Answer:
Change loop condition to 'left < right' instead of 'left <= right' -> Option D
Quick Check:
Loop must run while left < right [OK]
Hint: Use strict less than for pointers to avoid zero width [OK]
Common Mistakes:
Using <= instead of < causing invalid area
Updating both pointers at once
Not checking if area is greater before updating maxArea
5. Given the heights slice []int{4, 3, 2, 1, 4}, what is the maximum water container area? Use the two-pointer approach and explain why the maximum area is found at those positions.
hard
A. 12
B. 16
C. 8
D. 6
Solution
Step 1: Initialize pointers and calculate areas
Start with left=0 (height=4), right=4 (height=4), width=4, area=4*4=16.
Step 2: Move pointers and check other areas
Since heights[left] == heights[right], move right pointer left:
Now left=0, right=3 (height=1), width=3, area=min(4,1)*3=3
Move right to 2 (height=2), area= min(4,2)*2=4
Move right to 1 (height=3), area= min(4,3)*1=3
Max area remains 16.
Final Answer:
16 -> Option B
Quick Check:
Max area between positions 0 and 4 = 16 [OK]
Hint: Max area often at widest distance with min height [OK]
Common Mistakes:
Not considering both ends first
Moving wrong pointer when heights are equal
Calculating area incorrectly with wrong width
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.