What is the main idea behind searching in a 2D matrix where each row and column is sorted?
Start from the top-right or bottom-left corner and move either left or down based on comparison with the target, reducing search space step-by-step.
Click to reveal answer
beginner
Why is starting from the top-right corner effective in searching a sorted 2D matrix?
Because from the top-right, moving left decreases values and moving down increases values, allowing easy elimination of rows or columns.
Click to reveal answer
intermediate
In a 2D matrix sorted by rows and columns, what is the time complexity of the search algorithm starting from the top-right corner?
O(m + n), where m is the number of rows and n is the number of columns, because each step moves either one row down or one column left.
Click to reveal answer
beginner
What happens if the target is smaller than the current element when searching from the top-right corner?
Move left to the previous column because smaller values are to the left in the same row.
Click to reveal answer
beginner
What happens if the target is larger than the current element when searching from the top-right corner?
Move down to the next row because larger values are below in the same column.
Click to reveal answer
Where should you start searching in a 2D matrix sorted by rows and columns to efficiently find a target?
ABottom-left corner
BTop-left corner
CBottom-right corner
DTop-right corner
✗ Incorrect
Starting at the top-right corner allows moving left or down to eliminate rows or columns based on comparison.
If the current element is greater than the target, what is the next move in the search?
AMove left
BMove down
CMove right
DMove up
✗ Incorrect
Move left to find smaller elements because the matrix is sorted.
What is the time complexity of searching in a sorted 2D matrix using the top-right corner method?
AO(m * n)
BO(m + n)
CO(log(m * n))
DO(1)
✗ Incorrect
Each step moves either one row down or one column left, so total steps are at most m + n.
If the target is larger than the current element, where do you move next?
ALeft
BRight
CDown
DUp
✗ Incorrect
Move down to find larger elements in the same column.
What condition must the 2D matrix satisfy for the top-right corner search method to work correctly?
AEach row is sorted ascending, each column is sorted ascending
BEach row is sorted descending, each column is sorted ascending
CEach row is sorted ascending, each column is sorted descending
DNo sorting required
✗ Incorrect
The matrix must be sorted ascending in both rows and columns for the method to work.
Explain step-by-step how to search for a target in a 2D matrix sorted by rows and columns using the top-right corner method.
Think about how the sorted order helps decide the direction to move.
You got /5 concepts.
Describe why the time complexity of the search in a sorted 2D matrix is O(m + n) when using the top-right corner approach.
Consider how many moves you can make before going out of the matrix.
You got /4 concepts.
Practice
(1/5)
1. What is the main idea behind searching a target value in a 2D matrix where each row is sorted and the first integer of each row is greater than the last integer of the previous row?
easy
A. Use a hash map to store all elements for quick lookup
B. Search each row linearly until the target is found
C. Treat the 2D matrix as a sorted 1D array and use binary search
D. Start from bottom-left corner and move diagonally
Solution
Step 1: Understand matrix properties
The matrix rows are sorted and each row's first element is greater than the last element of the previous row, so the entire matrix can be seen as a sorted list.
Step 2: Apply binary search on the matrix
By treating the matrix as a single sorted array, binary search can be used to efficiently find the target.
Final Answer:
Treat the 2D matrix as a sorted 1D array and use binary search -> Option C
Quick Check:
Sorted matrix + binary search = Treat the 2D matrix as a sorted 1D array and use binary search [OK]
Hint: Think of the matrix as one sorted list for fast search [OK]
Common Mistakes:
Searching each row linearly wastes time
Using hash map wastes extra space
Starting from bottom-left works only for different matrix types
2. Which of the following Go code snippets correctly initializes a 2D matrix of integers with 3 rows and 4 columns?
easy
A. matrix := [3][4]int{}
B. matrix := [][]int{{3,4},{1,2,3},{4,5,6,7}}
C. matrix := make([]int, 3*4)
D. matrix := make([][]int, 3); for i := range matrix { matrix[i] = make([]int, 4) }
Solution
Step 1: Understand Go 2D slice initialization
In Go, a 2D slice is a slice of slices. We first create the outer slice with length 3, then initialize each inner slice with length 4.
Step 2: Check each option
matrix := make([][]int, 3); for i := range matrix { matrix[i] = make([]int, 4) } correctly creates a 3x4 2D slice. matrix := [][]int{{3,4},{1,2,3},{4,5,6,7}} is irregular and not fixed size. matrix := make([]int, 3*4) creates a 1D slice. matrix := [3][4]int{} creates a fixed array, not a slice.
Final Answer:
matrix := make([][]int, 3); for i := range matrix { matrix[i] = make([]int, 4) } -> Option D
Quick Check:
2D slice init with make + loop = matrix := make([][]int, 3); for i := range matrix { matrix[i] = make([]int, 4) } [OK]
Hint: Use make for outer slice, then loop to make inner slices [OK]
Common Mistakes:
Using make only once creates 1D slice
Confusing arrays and slices
Initializing inner slices incorrectly
3. What will be the output of the following Go code that searches for target 5 in the given matrix?
matrix := [][]int{
{1, 3, 5, 7},
{10, 11, 16, 20},
{23, 30, 34, 50},
}
target := 5
found := false
rows := len(matrix)
cols := len(matrix[0])
left, right := 0, rows*cols-1
for left <= right {
mid := (left + right) / 2
val := matrix[mid/cols][mid%cols]
if val == target {
found = true
break
} else if val < target {
left = mid + 1
} else {
right = mid - 1
}
}
fmt.Println(found)
medium
A. true
B. false
C. Compilation error
D. Runtime panic
Solution
Step 1: Understand binary search on 2D matrix
The code treats the matrix as a 1D sorted array and uses binary search with index mapping mid/cols and mid%cols to access elements.
Step 2: Trace the search for target 5
Target 5 is at matrix[0][2]. The binary search will find it and set found to true.
Final Answer:
true -> Option A
Quick Check:
Binary search finds 5 = true [OK]
Hint: Map 1D index to 2D with row=mid/cols, col=mid%cols [OK]
Common Mistakes:
Incorrect index mapping causing wrong element access
Off-by-one errors in binary search boundaries
Not breaking loop when found
4. The following Go code attempts to search for a target in a 2D matrix but has a bug. What is the bug?
func searchMatrix(matrix [][]int, target int) bool {
rows := len(matrix)
cols := len(matrix[0])
left, right := 0, rows*cols
for left <= right {
mid := (left + right) / 2
val := matrix[mid/cols][mid%cols]
if val == target {
return true
} else if val < target {
left = mid + 1
} else {
right = mid - 1
}
}
return false
}
medium
A. right should be initialized to rows*cols - 1
B. mid calculation causes integer overflow
C. matrix indexing should be matrix[mid%rows][mid/cols]
D. Loop condition should be left < right
Solution
Step 1: Check initialization of right pointer
Since indices go from 0 to rows*cols - 1, right should be rows*cols - 1, not rows*cols.
Step 2: Understand impact of wrong right value
Setting right to rows*cols causes out-of-bounds access when mid equals rows*cols, leading to runtime error.
Final Answer:
right should be initialized to rows*cols - 1 -> Option A
Quick Check:
Right boundary off by one causes error = right should be initialized to rows*cols - 1 [OK]
Hint: Right index = total elements - 1, not total elements [OK]
Common Mistakes:
Using rows*cols instead of rows*cols - 1 for right
Swapping row and column indices
Incorrect loop condition causing infinite loop
5. Given a 2D matrix where each row is sorted in ascending order but the first integer of each row may be smaller than the last integer of the previous row, which approach is best to search for a target value efficiently?
hard
A. Perform binary search on each row separately
B. Start from top-right corner and move left/down based on comparison
C. Use binary search treating the matrix as a sorted 1D array
D. Flatten the matrix into a 1D slice and sort it before searching
Solution
Step 1: Analyze matrix properties
Since rows are sorted but rows are not strictly increasing overall, the matrix is not globally sorted.
Step 2: Choose search strategy
Binary search on entire matrix won't work. Binary search on each row is O(m log n). Starting from top-right corner and moving left/down is O(m+n) and efficient.
Final Answer:
Start from top-right corner and move left/down based on comparison -> Option B
Quick Check:
Partial row sorting + top-right search = Start from top-right corner and move left/down based on comparison [OK]
Hint: Top-right corner search works when rows sorted but matrix not fully sorted [OK]
Common Mistakes:
Assuming full matrix is sorted for binary search
Flattening and sorting wastes time
Ignoring matrix properties leads to wrong approach
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.