Bird
Raised Fist0
DSA Cprogramming~5 mins

Search in 2D Matrix in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main idea behind searching in a 2D matrix where each row and column is sorted?
Start from the top-right corner and move left if the current number is greater than the target, or move down if it is smaller. This way, you eliminate a row or a column each step.
Click to reveal answer
beginner
Why is starting from the top-right corner effective in searching a sorted 2D matrix?
Because from the top-right corner, moving left decreases the value and moving down increases the value, allowing a clear decision to move closer to the target.
Click to reveal answer
intermediate
What is the time complexity of searching in a sorted 2D matrix using the top-right corner approach?
O(m + n), where m is the number of rows and n is the number of columns, because each step moves either one row down or one column left.
Click to reveal answer
beginner
In a 2D matrix sorted row-wise and column-wise, what happens if the current element is equal to the target during search?
The search stops immediately because the target is found.
Click to reveal answer
intermediate
Can binary search be directly applied to search in a 2D matrix sorted row-wise and column-wise? Why or why not?
No, because the matrix is not sorted in a single linear order. Each row and column is sorted, but the entire matrix is not sorted as a flat list.
Click to reveal answer
Where do you start searching in a 2D matrix sorted row-wise and column-wise?
ATop-right corner
BTop-left corner
CBottom-left corner
DBottom-right corner
If the current element is greater than the target, what is the next move in the search?
AMove right
BMove down
CMove left
DMove up
What is the worst-case time complexity of the search in a sorted 2D matrix?
AO(m * n)
BO(m + n)
CO(log(m * n))
DO(m^2 + n^2)
If the current element equals the target, what should you do?
AMove left
BMove down
CContinue searching
DStop and return true
Why can't you apply a single binary search on the entire 2D matrix sorted row-wise and column-wise?
ABecause the matrix is not sorted as a single list
BBecause binary search only works on arrays
CBecause the matrix has duplicates
DBecause the matrix is too large
Explain the step-by-step process to search for a target in a 2D matrix sorted row-wise and column-wise.
Think about how to eliminate rows or columns each step.
You got /5 concepts.
    Describe why the time complexity of searching in a sorted 2D matrix using the top-right corner approach is O(m + n).
    Consider how many moves you can make before going out of the matrix.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main idea behind searching a target value in a 2D matrix where each row is sorted and the first integer of each row is greater than the last integer of the previous row?
      easy
      A. Start from bottom-left corner and move up or right
      B. Search each row linearly until the target is found
      C. Use a hash map to store all elements for quick lookup
      D. Treat the 2D matrix as a sorted 1D array and apply binary search

      Solution

      1. Step 1: Understand matrix sorting property

        Each row is sorted and the first element of a row is greater than the last element of the previous row, so the entire matrix can be seen as a sorted list.
      2. Step 2: Apply binary search on the matrix

        By treating the matrix as a single sorted array, binary search can be used efficiently to find the target.
      3. Final Answer:

        Treat the 2D matrix as a sorted 1D array and apply binary search -> Option D
      4. Quick Check:

        Matrix sorted row-wise = binary search [OK]
      Hint: Think of the matrix as one sorted list for binary search [OK]
      Common Mistakes:
      • Searching each row linearly wastes time
      • Using hash map wastes extra space
      • Starting from bottom-left only works if columns are sorted
      2. Which of the following C code snippets correctly calculates the middle element index when performing binary search on a 2D matrix with rows and columns?
      easy
      A. int mid = (low + high) / 2; int row = mid % rows; int col = mid / cols;
      B. int mid = (low + high) / 2; int row = mid / cols; int col = mid % cols;
      C. int mid = (low + high) >> 1; int row = mid % cols; int col = mid / rows;
      D. int mid = (low + high) / 2; int row = mid / rows; int col = mid % rows;

      Solution

      1. Step 1: Calculate mid index in 1D

        mid = (low + high) / 2 correctly finds the middle index between low and high.
      2. Step 2: Convert mid to 2D indices

        Row is mid divided by number of columns (mid / cols), column is mid modulo number of columns (mid % cols).
      3. Final Answer:

        int mid = (low + high) / 2; int row = mid / cols; int col = mid % cols; -> Option B
      4. Quick Check:

        Row = mid/cols, Col = mid%cols [OK]
      Hint: Divide mid by cols for row, modulo cols for column [OK]
      Common Mistakes:
      • Swapping rows and columns in calculation
      • Using rows instead of cols for division/modulo
      • Using bit shift incorrectly for mid
      3. What will be the output of the following C code snippet searching for target 5 in the matrix?
      int matrix[3][4] = {
        {1, 3, 5, 7},
        {10, 11, 16, 20},
        {23, 30, 34, 60}
      };
      int target = 5;
      int rows = 3, cols = 4;
      int low = 0, high = rows * cols - 1;
      int found = 0;
      while (low <= high) {
        int mid = (low + high) / 2;
        int r = mid / cols;
        int c = mid % cols;
        if (matrix[r][c] == target) {
          found = 1;
          break;
        } else if (matrix[r][c] < target) {
          low = mid + 1;
        } else {
          high = mid - 1;
        }
      }
      printf("%d\n", found);
      medium
      A. 1
      B. 0
      C. 5
      D. Compilation error

      Solution

      1. Step 1: Perform binary search on matrix

        The code treats the matrix as a sorted 1D array and searches for target 5 using binary search.
      2. Step 2: Check if target 5 exists

        5 is present at matrix[0][2], so found will be set to 1 and loop breaks.
      3. Final Answer:

        1 -> Option A
      4. Quick Check:

        Target found = 1 [OK]
      Hint: Binary search returns 1 if target found, else 0 [OK]
      Common Mistakes:
      • Confusing indices calculation for row and column
      • Not updating low and high correctly
      • Printing target value instead of found flag
      4. Identify the bug in the following C code snippet that searches for a target in a 2D matrix and suggest the fix:
      int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
      int target = 4;
      int rows = 2, cols = 3;
      int low = 0, high = rows * cols - 1;
      int found = 0;
      while (low < high) {
        int mid = (low + high) / 2;
        int r = mid / cols;
        int c = mid % cols;
        if (matrix[r][c] == target) {
          found = 1;
          break;
        } else if (matrix[r][c] < target) {
          low = mid + 1;
        } else {
          high = mid - 1;
        }
      }
      printf("%d\n", found);
      medium
      A. Change mid calculation to (low + high + 1) / 2
      B. Swap row and column calculation
      C. Change while condition to low <= high
      D. Initialize found to -1 instead of 0

      Solution

      1. Step 1: Analyze loop condition

        The loop uses while (low < high), which misses the case when low == high, possibly skipping the last element.
      2. Step 2: Fix loop condition

        Changing to while (low <= high) ensures all elements are checked, including when low equals high.
      3. Final Answer:

        Change while condition to low <= high -> Option C
      4. Quick Check:

        Loop must check low == high [OK]
      Hint: Use while(low <= high) for complete binary search [OK]
      Common Mistakes:
      • Using < instead of <= in loop condition
      • Incorrect mid calculation causing infinite loop
      • Swapping row and column indices
      5. Given a 2D matrix where each row and each column is sorted in ascending order, but the first integer of each row is NOT necessarily greater than the last integer of the previous row, which approach is best to search for a target value efficiently?
      hard
      A. Start from top-right corner and move left or down
      B. Search each row using binary search separately
      C. Use binary search treating matrix as 1D sorted array
      D. Use linear search over all elements

      Solution

      1. Step 1: Understand matrix property

        Rows are sorted but no guarantee about relation between rows, so matrix is not fully sorted as 1D array.
      2. Step 2: Choose search method

        Starting from top-right corner, move left if current > target, move down if current < target, efficiently narrows search.
      3. Final Answer:

        Start from top-right corner and move left or down -> Option A
      4. Quick Check:

        Partial row sorting = stair-step search [OK]
      Hint: Use stair-step search from top-right for partially sorted matrix [OK]
      Common Mistakes:
      • Applying full binary search on unsorted matrix
      • Searching each row linearly wasting time
      • Using hash map wasting extra space
      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