Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Search in 2D Matrix in DSA Javascript - 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
Output of search in sorted 2D matrix
What is the output of the following JavaScript code that searches for the number 5 in a sorted 2D matrix?
DSA Javascript
const matrix = [
  [1, 3, 5],
  [7, 9, 11],
  [13, 15, 17]
];

function searchMatrix(matrix, target) {
  let row = 0;
  let col = matrix[0].length - 1;
  while (row < matrix.length && col >= 0) {
    if (matrix[row][col] === target) {
      return [row, col];
    } else if (matrix[row][col] > target) {
      col--;
    } else {
      row++;
    }
  }
  return [-1, -1];
}

console.log(searchMatrix(matrix, 5));
A[0, 2]
B[2, 0]
C[-1, -1]
D[1, 0]
Attempts:
2 left
💡 Hint
Trace the search starting from the top-right corner of the matrix.
❓ Predict Output
intermediate
2:00remaining
Result of searching for a missing element
What does the following code print when searching for 8 in the given matrix?
DSA Javascript
const matrix = [
  [2, 4, 6],
  [8, 10, 12],
  [14, 16, 18]
];

function searchMatrix(matrix, target) {
  let row = 0;
  let col = matrix[0].length - 1;
  while (row < matrix.length && col >= 0) {
    if (matrix[row][col] === target) {
      return [row, col];
    } else if (matrix[row][col] > target) {
      col--;
    } else {
      row++;
    }
  }
  return [-1, -1];
}

console.log(searchMatrix(matrix, 8));
A[-1, -1]
B[0, 2]
C[1, 0]
D[2, 1]
Attempts:
2 left
💡 Hint
Check the matrix elements row by row and column by column as per the search logic.
❓ Predict Output
advanced
2:00remaining
Output of search in matrix with duplicates
What is the output of this code searching for 3 in a matrix containing duplicates?
DSA Javascript
const matrix = [
  [1, 2, 3],
  [3, 4, 5],
  [5, 6, 7]
];

function searchMatrix(matrix, target) {
  let row = 0;
  let col = matrix[0].length - 1;
  while (row < matrix.length && col >= 0) {
    if (matrix[row][col] === target) {
      return [row, col];
    } else if (matrix[row][col] > target) {
      col--;
    } else {
      row++;
    }
  }
  return [-1, -1];
}

console.log(searchMatrix(matrix, 3));
A[0, 2]
B[1, 0]
C[-1, -1]
D[2, 0]
Attempts:
2 left
💡 Hint
The search stops at the first found occurrence from top-right.
🧠 Conceptual
advanced
2:00remaining
Why start search from top-right corner?
Why is the top-right corner chosen as the starting point for searching a target in a sorted 2D matrix where each row and column is sorted ascending?
ABecause starting from top-right guarantees the target is found in the first step.
BBecause top-right is always the smallest element in the matrix.
CBecause top-right corner is the middle element of the matrix.
DBecause from top-right, moving left decreases values and moving down increases values, allowing efficient elimination.
Attempts:
2 left
💡 Hint
Think about how values change when moving left or down from the top-right.
🔧 Debug
expert
2:00remaining
Identify the error in this 2D matrix search code
What error will this code produce when searching for 10 in the matrix? Identify the exact error type.
DSA Javascript
const matrix = [
  [1, 4, 7],
  [8, 10, 12],
  [14, 16, 18]
];

function searchMatrix(matrix, target) {
  let row = 0;
  let col = matrix[0].length; // Note the difference here
  while (row < matrix.length && col >= 0) {
    if (matrix[row][col] === target) {
      return [row, col];
    } else if (matrix[row][col] > target) {
      col--;
    } else {
      row++;
    }
  }
  return [-1, -1];
}

console.log(searchMatrix(matrix, 10));
ARangeError: Maximum call stack size exceeded
BTypeError: Cannot read property 'undefined' of undefined
CReferenceError: col is not defined
DTypeError: Cannot read property 'length' of undefined
Attempts:
2 left
💡 Hint
Check the initial value of 'col' and how it is used as an index.

Practice

(1/5)
1. What is the main idea behind searching a target value in a 2D matrix where each row and column is sorted in ascending order?
easy
A. Use binary search on each row independently
B. Start from bottom-left corner and move right or down based on comparison
C. Search each element one by one from top-left to bottom-right
D. Start from top-right corner and move left or down based on comparison

Solution

  1. Step 1: Understand matrix properties

    Each row and column is sorted ascending, so top-right element is a good start to decide direction.
  2. Step 2: Use top-right corner to guide search

    If target is less than current element, move left; if greater, move down.
  3. Final Answer:

    Start from top-right corner and move left or down based on comparison -> Option D
  4. Quick Check:

    Top-right start = efficient search [OK]
Hint: Start at top-right to decide move direction quickly [OK]
Common Mistakes:
  • Searching all elements one by one wastes time
  • Starting from bottom-left without clear logic
  • Using binary search on each row ignores column sorting
2. Which of the following is the correct syntax to check if a target exists in a 2D matrix named matrix in JavaScript?
easy
A. for(let i=0; i
B. for(let i=0; i
C. for(let i=0; i
D. for(let i=0; i

Solution

  1. Step 1: Identify correct loop ranges

    Outer loop runs over rows (matrix.length), inner loop over columns (matrix[0].length).
  2. Step 2: Check element equality with strict equality

    Use === for exact match and return true if found.
  3. Final Answer:

    for(let i=0; i -> Option B
  4. Quick Check:

    Correct loop ranges and strict equality [OK]
Hint: Outer loop rows, inner loop columns, use === for comparison [OK]
Common Mistakes:
  • Swapping row and column lengths in loops
  • Using == instead of === causing type coercion
  • Looping inner loop with wrong length causing errors
3. What will be the output of the following code snippet?
const matrix = [
  [1, 4, 7, 11],
  [2, 5, 8, 12],
  [3, 6, 9, 16],
  [10, 13, 14, 17]
];
const target = 5;

function searchMatrix(matrix, target) {
  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, target));
medium
A. Error
B. false
C. true
D. undefined

Solution

  1. Step 1: Start from top-right element

    Initial position is matrix[0][3] = 11, compare with target 5.
  2. Step 2: Move left since 11 > 5, now at matrix[0][2] = 7

    7 > 5, move left again to matrix[0][1] = 4.
  3. Step 3: 4 < 5, move down to matrix[1][1] = 5

    Found target 5, return true.
  4. Final Answer:

    true -> Option C
  5. Quick Check:

    Top-right search finds 5 = true [OK]
Hint: Move left if bigger, down if smaller from top-right [OK]
Common Mistakes:
  • Starting from wrong corner causing wrong moves
  • Not updating row or column correctly
  • Returning false too early without full search
4. Find the bug in the following code that searches for a target in a 2D matrix where rows and columns are sorted.
function searchMatrix(matrix, target) {
  let row = matrix.length - 1;
  let col = 0;
  while(row >= 0 && col < matrix[0].length) {
    if(matrix[row][col] === target) return true;
    else if(matrix[row][col] < target) row--;
    else col++;
  }
  return false;
}
medium
A. The directions to move row and col are swapped in conditions
B. The initial row and col values are incorrect
C. The while loop condition should use '||' instead of '&&'
D. The function should return false inside the loop

Solution

  1. Step 1: Analyze movement logic

    Starting at bottom-left, if current < target, should move right (col++), else move up (row--).
  2. Step 2: Check conditions in code

    Code moves row-- when current < target, which is wrong; it should move col++ instead.
  3. Final Answer:

    The directions to move row and col are swapped in conditions -> Option A
  4. Quick Check:

    Correct move directions fix search [OK]
Hint: From bottom-left, move right if smaller, up if bigger [OK]
Common Mistakes:
  • Swapping row and column moves
  • Wrong initial position for search
  • Incorrect loop condition causing infinite loop
5. Given a 2D matrix where each row and column is sorted ascending, write a function to count how many times a target appears in the matrix efficiently. Which approach is best?
hard
A. Start from top-right and move left/down counting matches (O(m+n))
B. Traverse entire matrix counting matches (O(m*n))
C. Use binary search on each row and sum counts (O(m*log n))
D. Flatten matrix to 1D array and use binary search once (O(m*n))

Solution

  1. Step 1: Understand time complexities

    Full traversal is slow (O(m*n)), binary search per row is better but still costly.
  2. Step 2: Use top-right start to count efficiently

    Moving left/down lets you skip rows or columns, counting matches in O(m+n) time.
  3. Final Answer:

    Start from top-right and move left/down counting matches (O(m+n)) -> Option A
  4. Quick Check:

    Top-right traversal counts efficiently [OK]
Hint: Top-right start counts matches in linear time [OK]
Common Mistakes:
  • Using full traversal wasting time
  • Flattening matrix losing sorted structure
  • Binary search per row misses column info
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