What is the main idea behind searching in a 2D matrix where each row and column is sorted?
Start from the top-right corner and move left if the current number is greater than the target, or move down if it is smaller. This way, you eliminate a row or a column each step.
Click to reveal answer
beginner
Why is starting from the top-right corner effective in a sorted 2D matrix search?
Because from the top-right corner, moving left decreases the value and moving down increases the value, helping to decide the direction to move based on comparison with the target.
Click to reveal answer
intermediate
What is the time complexity of searching in a sorted 2D matrix using the top-right corner approach?
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
In the context of searching a 2D matrix, what does it mean if the current element is less than the target?
It means you should move down to the next row because all elements to the left are smaller and won't match the target.
Click to reveal answer
beginner
What happens if the target is not found after moving through the matrix using the top-right corner approach?
You conclude the target is not in the matrix because you have eliminated all possible positions by moving left or down.
Click to reveal answer
Where do you start searching in a sorted 2D matrix to efficiently find a target?
ABottom-left corner
BTop-right corner
CTop-left corner
DBottom-right corner
✗ Incorrect
Starting at the top-right corner allows you to move left or down to eliminate rows or columns efficiently.
If the current element is greater than the target, what is the next move?
AMove left
BMove down
CMove right
DMove up
✗ Incorrect
Moving left decreases the value, helping to find smaller numbers closer to the target.
What is the time complexity of the search algorithm in a sorted 2D matrix?
AO(m + n)
BO(log(m * n))
CO(1)
DO(m * n)
✗ Incorrect
Each step moves either one row down or one column left, so the total steps are at most m + n.
If the current element is less than the target, where should you move next?
ALeft
BUp
CRight
DDown
✗ Incorrect
Moving down increases the value, which helps to find the target if it is larger.
What does it mean if you reach outside the matrix boundaries without finding the target?
ATarget is found
BMatrix is empty
CTarget is not in the matrix
DMatrix is unsorted
✗ Incorrect
Exiting the matrix means all possible positions have been checked and the target is not present.
Explain the step-by-step process to search for a target in a sorted 2D matrix.
Think about how to eliminate rows or columns based on comparison.
You got /5 concepts.
Describe why the search in a sorted 2D matrix is efficient compared to checking every element.
Focus on how sorting helps reduce search space.
You got /4 concepts.
Practice
(1/5)
1. What is the main idea behind searching in a 2D matrix where each row and column is sorted in ascending order?
easy
A. Start from the bottom-left corner and move right or up based on comparison
B. Start from the top-right corner and move left or down based on comparison
C. Search each element row by row until the target is found
D. Use binary search on each row independently
Solution
Step 1: Understand matrix properties
Since each row and column is sorted ascending, the top-right element is the largest in its row and smallest in its column.
Step 2: Use top-right corner to decide movement
If the target is less than the current element, move left; if greater, move down. This efficiently narrows search space.
Final Answer:
Start from the top-right corner and move left or down based on comparison -> Option B
Quick Check:
Top-right corner search = Start from the top-right corner and move left or down based on comparison [OK]
Hint: Start at top-right, move left if bigger, down if smaller [OK]
Common Mistakes:
Starting from bottom-left without adjusting moves correctly
Searching row by row wastes time
Using binary search on rows ignores column sorting
2. Which of the following TypeScript code snippets correctly initializes a 2D matrix of numbers?
easy
A. const matrix: number[][] = [[1,2,3],[4,5],[6,7,8,9]];
B. const matrix: number[] = [1,2,3,4,5,6,7,8,9];
C. const matrix: number[][] = [[1,2,3],[4,5,6],[7,8,9]];
D. const matrix: number[][] = [1,2,3,4,5,6,7,8,9];
Solution
Step 1: Check matrix type declaration
TypeScript 2D array is declared as number[][]. const matrix: number[][] = [[1,2,3],[4,5,6],[7,8,9]];.
Step 2: Validate matrix structure
const matrix: number[][] = [[1,2,3],[4,5,6],[7,8,9]]; has uniform rows with 3 elements each, valid for a matrix. const matrix: number[][] = [[1,2,3],[4,5],[6,7,8,9]]; has rows of different lengths, which is allowed but less common for matrices.
Final Answer:
const matrix: number[][] = [[1,2,3],[4,5,6],[7,8,9]]; -> Option C
Hint: Use number[][] with nested arrays for 2D matrix [OK]
Common Mistakes:
Using single array for 2D matrix
Incorrect type declaration like number[] for 2D
Mixing array elements without nested arrays
3. What will be the output of the following TypeScript code?
const matrix = [
[1, 4, 7, 11],
[2, 5, 8, 12],
[3, 6, 9, 16],
[10, 13, 14, 17]
];
function searchMatrix(matrix: number[][], target: number): boolean {
let row = 0;
let col = matrix[0].length - 1;
while (row < matrix.length && col >= 0) {
if (matrix[row][col] === target) return true;
else if (matrix[row][col] > target) col--;
else row++;
}
return false;
}
console.log(searchMatrix(matrix, 5));
medium
A. Runtime error
B. false
C. undefined
D. true
Solution
Step 1: Start search from top-right corner
Initial position is row=0, col=3 (value 11). Since 11 > 5, move left to col=2 (value 7).
Step 2: Compare and move accordingly
7 > 5, move left to col=1 (value 4). 4 < 5, move down to row=1, col=1 (value 5). Found target 5, return true.
Final Answer:
true -> Option D
Quick Check:
Search finds 5 = true [OK]
Hint: Start top-right, move left if bigger, down if smaller [OK]
Common Mistakes:
Not updating row and col correctly
Returning false too early
Confusing row and column indices
4. Identify the bug in this TypeScript function that searches a target in a sorted 2D matrix:
function searchMatrix(matrix: number[][], target: number): boolean {
let row = 0;
let col = matrix.length - 1;
while (row < matrix.length && col >= 0) {
if (matrix[row][col] === target) return true;
else if (matrix[row][col] > target) col--;
else row++;
}
return false;
}
medium
A. col should be initialized to matrix[0].length - 1, not matrix.length - 1
B. row should start from matrix.length - 1
C. The while loop condition should use col < matrix[0].length
D. The function should return true at the end instead of false
Solution
Step 1: Check initialization of col variable
col is set to matrix.length - 1, which is number of rows minus one, but columns count is matrix[0].length.
Step 2: Correct col initialization
col should be matrix[0].length - 1 to point to the last column index in the first row.
Final Answer:
col should be initialized to matrix[0].length - 1, not matrix.length - 1 -> Option A
Quick Check:
col init must match columns count = col should be initialized to matrix[0].length - 1, not matrix.length - 1 [OK]
Hint: col index = last column, use matrix[0].length - 1 [OK]
Common Mistakes:
Using rows count for column index
Wrong loop conditions causing out-of-bounds
Returning true instead of false when not found
5. Given a 2D matrix where each row and column is sorted ascending, how would you modify the search function to return the position [row, col] of the target if found, or [-1, -1] if not found? Choose the correct code snippet.
function searchMatrix(matrix: number[][], target: number): number[] {
let row = 0;
let col = matrix[0].length - 1;
while (row < matrix.length && col >= 0) {
if (matrix[row][col] === target) {
// What to return here?
} else if (matrix[row][col] > target) {
col--;
} else {
row++;
}
}
// What to return if not found?
}
hard
A. Return [row, col] inside if, and [-1, -1] after loop
B. Return [col, row] inside if, and [0, 0] after loop
C. Return true inside if, and false after loop
D. Return matrix[row][col] inside if, and null after loop
Solution
Step 1: Return position when target found
Inside the if condition, return the current indices as [row, col] to indicate target position.
Step 2: Return [-1, -1] if target not found
After the loop ends without finding target, return [-1, -1] to indicate absence.
Final Answer:
Return [row, col] inside if, and [-1, -1] after loop -> Option A
Quick Check:
Return position or [-1, -1] if missing = Return [row, col] inside if, and [-1, -1] after loop [OK]
Hint: Return indices when found, [-1, -1] if not found [OK]
Common Mistakes:
Swapping row and col in return
Returning boolean instead of position
Returning wrong default value when not found
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.