What if you could find any number in a huge grid without checking every single spot?
Why Search in 2D Matrix in DSA Javascript?
Imagine you have a big grid of numbers, like a spreadsheet, and you want to find if a certain number is there.
Doing this by looking at each number one by one is like searching for a friend's house in a huge city without a map.
Checking every number takes a lot of time, especially if the grid is big.
It's easy to make mistakes or get tired and miss the number.
This slow and tiring process wastes your time and energy.
Using a smart way to search in the grid, like starting from the top-right corner and moving left or down, helps you skip many numbers quickly.
This method uses the order of numbers in rows and columns to find the target fast without checking everything.
for (let row = 0; row < matrix.length; row++) { for (let col = 0; col < matrix[0].length; col++) { if (matrix[row][col] === target) return true; } } return false;
let row = 0, 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;
This method lets you find numbers in big grids quickly and confidently, saving time and effort.
Think of looking for a book in a library where books are arranged by author and title; you can skip whole shelves by knowing the order.
Manual search checks every element and is slow.
Smart search uses the matrix order to skip unnecessary checks.
It makes searching in big grids fast and easy.
Practice
Solution
Step 1: Understand matrix properties
Each row and column is sorted ascending, so top-right element is a good start to decide direction.Step 2: Use top-right corner to guide search
If target is less than current element, move left; if greater, move down.Final Answer:
Start from top-right corner and move left or down based on comparison -> Option DQuick Check:
Top-right start = efficient search [OK]
- Searching all elements one by one wastes time
- Starting from bottom-left without clear logic
- Using binary search on each row ignores column sorting
matrix in JavaScript?Solution
Step 1: Identify correct loop ranges
Outer loop runs over rows (matrix.length), inner loop over columns (matrix[0].length).Step 2: Check element equality with strict equality
Use === for exact match and return true if found.Final Answer:
for(let i=0; i -> Option BQuick Check:
Correct loop ranges and strict equality [OK]
- Swapping row and column lengths in loops
- Using == instead of === causing type coercion
- Looping inner loop with wrong length causing errors
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));Solution
Step 1: Start from top-right element
Initial position is matrix[0][3] = 11, compare with target 5.Step 2: Move left since 11 > 5, now at matrix[0][2] = 7
7 > 5, move left again to matrix[0][1] = 4.Step 3: 4 < 5, move down to matrix[1][1] = 5
Found target 5, return true.Final Answer:
true -> Option CQuick Check:
Top-right search finds 5 = true [OK]
- Starting from wrong corner causing wrong moves
- Not updating row or column correctly
- Returning false too early without full search
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;
}Solution
Step 1: Analyze movement logic
Starting at bottom-left, if current < target, should move right (col++), else move up (row--).Step 2: Check conditions in code
Code moves row-- when current < target, which is wrong; it should move col++ instead.Final Answer:
The directions to move row and col are swapped in conditions -> Option AQuick Check:
Correct move directions fix search [OK]
- Swapping row and column moves
- Wrong initial position for search
- Incorrect loop condition causing infinite loop
Solution
Step 1: Understand time complexities
Full traversal is slow (O(m*n)), binary search per row is better but still costly.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.Final Answer:
Start from top-right and move left/down counting matches (O(m+n)) -> Option AQuick Check:
Top-right traversal counts efficiently [OK]
- Using full traversal wasting time
- Flattening matrix losing sorted structure
- Binary search per row misses column info
Ready to prove it?
Pass the test and this pattern moves unknown
