Bird
Raised Fist0
DSA Javascriptprogramming~10 mins

Search in 2D Matrix in DSA Javascript - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to start searching from the top-right corner of the matrix.

DSA Javascript
let row = 0;
let col = matrix[0].length [1] 1;
Drag options to blanks, or click blank then click option'
A+
B/
C*
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using + instead of - causes index out of range.
Using * or / is not correct for index calculation.
2fill in blank
medium

Complete the code to move left when the current element is greater than the target.

DSA Javascript
if (matrix[row][col] > target) {
  col [1] 1;
}
Drag options to blanks, or click blank then click option'
A++
B+=
C-=
D--
Attempts:
3 left
💡 Hint
Common Mistakes
Using += increases the column index, moving right instead of left.
Using ++ or -- alone changes by 1 but does not assign.
3fill in blank
hard

Fix the error in the loop condition to prevent out-of-bound errors.

DSA Javascript
while (row < matrix.length && col [1] 0) {
  // search logic
}
Drag options to blanks, or click blank then click option'
A<
B>=
C<=
D>
Attempts:
3 left
💡 Hint
Common Mistakes
Using > 0 skips checking column 0.
Using < or <= causes logic errors in loop.
4fill in blank
hard

Fill both blanks to correctly move down or left based on comparison.

DSA Javascript
if (matrix[row][col] < target) {
  row [1] 1;
} else {
  col [2] 1;
}
Drag options to blanks, or click blank then click option'
A+=
B-=
C++
D--
Attempts:
3 left
💡 Hint
Common Mistakes
Using -= to move down or += to move left is incorrect.
Using ++ or -- without assignment causes errors.
5fill in blank
hard

Fill all three blanks to complete the search function returning true if target found, else false.

DSA Javascript
function searchMatrix(matrix, target) {
  let row = 0;
  let col = matrix[0].length [1] 1;
  while (row < matrix.length && col [2] 0) {
    if (matrix[row][col] === target) {
      return [3];
    } else if (matrix[row][col] < target) {
      row += 1;
    } else {
      col -= 1;
    }
  }
  return false;
}
Drag options to blanks, or click blank then click option'
A+
B>=
Ctrue
D-
E<
Ffalse
Attempts:
3 left
💡 Hint
Common Mistakes
Using + instead of - for last column index.
Using < or <= in loop condition causing errors.
Returning false instead of true when found.

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