📖 Scenario: You have a grid of numbers arranged in rows and columns, like seats in a theater. You want to find if a specific number is present in this grid.
🎯 Goal: Build a program that searches for a given number in a 2D matrix and tells if it is found or not.
📋 What You'll Learn
Create a 2D matrix with exact values
Create a variable for the target number to search
Use nested loops to search the target in the matrix
Print 'Found' if the target is in the matrix, else print 'Not Found'
💡 Why This Matters
🌍 Real World
Searching in grids or tables is common in games, maps, and spreadsheets.
💼 Career
Understanding how to search in 2D data structures is important for software development and data analysis.
Progress0 / 4 steps
1
Create the 2D matrix
Create a 2D vector called matrix with these exact rows and columns: { {1, 3, 5}, {7, 9, 11}, {13, 15, 17} }
DSA C++
Hint
Use std::vector> to create a 2D matrix with the exact rows and columns.
2
Set the target number to search
Create an integer variable called target and set it to 9
DSA C++
Hint
Use int target = 9; to create the target number.
3
Search the target in the matrix
Use nested for loops with variables i and j to iterate over matrix. Create a boolean variable found set to false. If matrix[i][j] equals target, set found to true and break both loops.
DSA C++
Hint
Use two for loops to check each element. Use found to remember if target is found and break loops early.
4
Print the search result
Print "Found" if found is true, otherwise print "Not Found"
DSA C++
Hint
Use if (found) to decide what to print. Use std::cout to print the result.
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. Use binary search on each row independently
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. Start from the bottom-left corner and move right or up based on comparison
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 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/down based on target comparison [OK]
Common Mistakes:
Starting from bottom-left without adjusting moves
Searching all elements without using sorting
Using binary search on unsorted columns
2. Which of the following C++ code snippets correctly initializes a 2D vector matrix with 3 rows and 4 columns filled with zeros?
easy
A. std::vector matrix(4, std::vector<int>(3, 0));
B. std::vector<int> matrix(3, std::vector<int>(4, 0));
C. std::vector matrix(3, std::vector<int>(4, 0));
D. std::vector matrix(3, 4, 0);
Solution
Step 1: Understand vector initialization syntax
To create a 2D vector with 3 rows and 4 columns, use vector of vectors with inner vector size 4.
Step 2: Check each option
std::vector matrix(3, std::vector<int>(4, 0)); correctly uses vector with 3 rows and inner vector of size 4 filled with 0.
Final Answer:
std::vector matrix(3, std::vector<int>(4, 0)); -> Option C
Hint: Use vector(rows, vector<int>(cols, val)) [OK]
Common Mistakes:
Using wrong vector type for inner vector
Swapping rows and columns sizes
Trying to pass three arguments to vector constructor
3. What will be the output of the following C++ code snippet?
std::vector matrix = {
{1, 4, 7, 11},
{2, 5, 8, 12},
{3, 6, 9, 16},
{10, 13, 14, 17}
};
int target = 5;
int row = 0, col = 3;
bool found = false;
while (row < 4 && col >= 0) {
if (matrix[row][col] == target) {
found = true;
break;
} else if (matrix[row][col] > target) {
col--;
} else {
row++;
}
}
std::cout << (found ? "Found" : "Not Found") << std::endl;
medium
A. Found
B. Not Found
C. Compilation Error
D. Runtime Error
Solution
Step 1: Trace the search starting at matrix[0][3]
matrix[0][3] = 11, target=5, 11 > 5 so col-- to 2.
Step 2: Continue search
matrix[0][2] = 7, 7 > 5 so col-- to 1; matrix[0][1] = 4, 4 < 5 so row++ to 1; matrix[1][1] = 5 equals target, found = true.
Final Answer:
Found -> Option A
Quick Check:
Search finds 5 at (1,1) = Found [OK]
Hint: Start top-right, move left if bigger, down if smaller [OK]
Common Mistakes:
Not updating row and col correctly
Confusing comparison operators
Assuming target not found without full search
4. Identify the bug in the following C++ code that searches for a target in a sorted 2D matrix:
bool searchMatrix(std::vector& matrix, int target) {
int row = 0, col = matrix[0].size() - 1;
while (row <= matrix.size() && col >= 0) {
if (matrix[row][col] == target) return true;
else if (matrix[row][col] > target) col--;
else row++;
}
return false;
}
medium
A. The while loop condition should use < instead of <= for row
B. The initial column index is incorrect
C. The function should return false inside the loop
D. The matrix should be passed by value, not reference
Solution
Step 1: Analyze loop boundary for row index
matrix.size() gives number of rows; valid row indices are 0 to size()-1, so row < size() is correct.
Step 2: Identify off-by-one error
Using row <= matrix.size() allows row to equal size(), causing out-of-bounds access.
Final Answer:
The while loop condition should use < instead of <= for row -> Option A
Quick Check:
Row index must be less than size() [OK]
Hint: Use < size() for indices, not <= size() [OK]
Common Mistakes:
Using <= causing out-of-bounds errors
Incorrect initial column index
Returning false too early inside loop
5. Given a 2D matrix where each row and column is sorted ascending, write a function to count how many elements are less than or equal to a target value. Which approach is most efficient?
hard
A. Flatten matrix and sort, then count using binary search (O(m*n log(m*n)))
B. Use binary search on each row to find count per row (O(m*log n))
C. Traverse each element and count if <= target (O(m*n))
D. Start from bottom-left and move up or right to count (O(m+n))
Solution
Step 1: Understand matrix sorted property
Rows and columns sorted ascending allows efficient traversal from bottom-left.
Step 2: Use bottom-left traversal to count elements
Start at bottom-left; if element <= target, all elements above in that column are <= target, move right and add count; else move up.
Step 3: Compare efficiency
This approach visits at most m+n elements, better than binary search on each row or full traversal.
Final Answer:
Start from bottom-left and move up or right to count (O(m+n)) -> Option D
Quick Check:
Bottom-left traversal counts in O(m+n) [OK]
Hint: Count using bottom-left traversal for O(m+n) time [OK]