Bird
Raised Fist0
DSA Typescriptprogramming~20 mins

Search in 2D Matrix in DSA Typescript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
2D Matrix Search Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of the search function?
Given the matrix and the target, what will the search function return?
DSA Typescript
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;
}

const matrix = [
  [1, 4, 7, 11],
  [2, 5, 8, 12],
  [3, 6, 9, 16],
  [10, 13, 14, 17]
];
const target = 5;
console.log(searchMatrix(matrix, target));
Atrue
Bfalse
Cundefined
DTypeError
Attempts:
2 left
💡 Hint
Start from top-right corner and move left or down based on comparison.
❓ Predict Output
intermediate
2:00remaining
What is the output of the search for a missing target?
What will the function return when searching for a target not in the matrix?
DSA Typescript
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;
}

const matrix = [
  [1, 4, 7, 11],
  [2, 5, 8, 12],
  [3, 6, 9, 16],
  [10, 13, 14, 17]
];
const target = 15;
console.log(searchMatrix(matrix, target));
Aundefined
BRangeError
Cfalse
Dtrue
Attempts:
2 left
💡 Hint
If the target is not found, the function returns false.
🧠 Conceptual
advanced
2:00remaining
Why does the search start from the top-right corner?
Why is the top-right corner chosen as the starting point for searching in a sorted 2D matrix?
ABecause top-right corner is always the smallest element in the matrix.
BBecause it is easier to implement recursion from top-right corner.
CBecause starting from top-right allows binary search on rows only.
DBecause from top-right, we can move left to smaller numbers and down to larger numbers, narrowing search efficiently.
Attempts:
2 left
💡 Hint
Think about how the matrix is sorted and how moving left or down changes values.
🔧 Debug
advanced
2:00remaining
What error does this code produce?
What error will this code produce when run?
DSA Typescript
function searchMatrix(matrix: number[][], target: number): boolean {
  let row = 0;
  let col = matrix[0].length;
  while (row < matrix.length && col >= 0) {
    if (matrix[row][col] === target) {
      return true;
    } else if (matrix[row][col] > target) {
      col--;
    } else {
      row++;
    }
  }
  return false;
}

const matrix = [
  [1, 4, 7, 11],
  [2, 5, 8, 12],
  [3, 6, 9, 16],
  [10, 13, 14, 17]
];
const target = 5;
console.log(searchMatrix(matrix, target));
AIndexError
BRangeError
CTypeError
Dundefined behavior
Attempts:
2 left
💡 Hint
Check the initial value of col and array indexing.
🚀 Application
expert
2:00remaining
How many elements are checked in worst case?
Given an n x n matrix sorted as described, what is the maximum number of elements the search function checks in the worst case?
A2n
Blog n
Cn^2
Dn
Attempts:
2 left
💡 Hint
Consider the path the search pointer takes from top-right to bottom-left.

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

  1. 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.
  2. 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.
  3. Final Answer:

    Start from the top-right corner and move left or down based on comparison -> Option B
  4. 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

  1. 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]];.
  2. 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.
  3. Final Answer:

    const matrix: number[][] = [[1,2,3],[4,5,6],[7,8,9]]; -> Option C
  4. Quick Check:

    Proper 2D array syntax = const matrix: number[][] = [[1,2,3],[4,5,6],[7,8,9]]; [OK]
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

  1. 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).
  2. 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.
  3. Final Answer:

    true -> Option D
  4. 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

  1. 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.
  2. Step 2: Correct col initialization

    col should be matrix[0].length - 1 to point to the last column index in the first row.
  3. Final Answer:

    col should be initialized to matrix[0].length - 1, not matrix.length - 1 -> Option A
  4. 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

  1. Step 1: Return position when target found

    Inside the if condition, return the current indices as [row, col] to indicate target position.
  2. Step 2: Return [-1, -1] if target not found

    After the loop ends without finding target, return [-1, -1] to indicate absence.
  3. Final Answer:

    Return [row, col] inside if, and [-1, -1] after loop -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard