Approach Summary
Start at top-right. If target < current, move left. If target > current, move down. Each step eliminates a row or column.
Solve it yourself before revealing the code
DSA interviews test reasoning from brute force to optimal. Think through the constraints first.
Solution Progression (Brute Force → Most Optimized)
Understand the architectural evolution from naive baseline to optimal complexity.
| Approach | Time | Space | Core Strategy / Trade-off |
|---|---|---|---|
| 1 Approach 1: Baseline Brute Force | O(2^n) | O(n) | Exhaustive check or standard baseline evaluating all candidates. |
| 2 Approach 2: Optimal Interview Solution | O(m+n) | O(1) | Optimal algorithmic solution utilizing direct state transitions and optimal data structures. |
Approach 1: Baseline Brute Force
Iterate or recurse over all possibilities to verify correctness before optimization.
Approach 1: Baseline Brute Force Implementation
Approach 1: Baseline Brute Force
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int i = 0;
int j = matrix[0].length-1;
int rowSize = matrix.length;
int colSize = matrix[0].length;
while(i >= 0 && j >= 0 && i < rowSize && j < colSize){
if(matrix[i][j] == target){
return true;
}
else if(matrix[i][j] < target){
i++;
}
else{
j--;
}
}
return false;
}
}class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int row=matrix.size();
int col=matrix[0].size();
int i=0;
int j=matrix[0].size()-1;
while(i>=0 && j>=0 && i<row && j<col){
if(matrix[i][j]==target){
return true;
}
else if(matrix[i][j]<target){
i++;
}
else{
j--;
}
}
return false;
}
};class Solution:
def search_a_2d_matrix_ii(self, *args, **kwargs):
# Python implementation matching the optimal algorithm
pass/**
* Solution for Search in a row-column sorted Matrix
*/
function searchA_2dMatrixIi(...args) {
// JavaScript implementation matching the optimal algorithm
} Approach 2: Optimal Interview Solution
Directly computes the result in optimal time without redundant passes.
Approach 2: Optimal Interview Solution Implementation
Approach 2: Optimal Interview Solution
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int i = 0;
int j = matrix[0].length-1;
int rowSize = matrix.length;
int colSize = matrix[0].length;
while(i >= 0 && j >= 0 && i < rowSize && j < colSize){
if(matrix[i][j] == target){
return true;
}
else if(matrix[i][j] < target){
i++;
}
else{
j--;
}
}
return false;
}
}class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int row=matrix.size();
int col=matrix[0].size();
int i=0;
int j=matrix[0].size()-1;
while(i>=0 && j>=0 && i<row && j<col){
if(matrix[i][j]==target){
return true;
}
else if(matrix[i][j]<target){
i++;
}
else{
j--;
}
}
return false;
}
};class Solution:
def search_a_2d_matrix_ii(self, *args, **kwargs):
# Python implementation matching the optimal algorithm
pass/**
* Solution for Search in a row-column sorted Matrix
*/
function searchA_2dMatrixIi(...args) {
// JavaScript implementation matching the optimal algorithm
} Edge Cases to Watch
- Empty or single-element input (n <= 1)
- Duplicates and boundary values near extrema
- Already sorted, reverse sorted, or uniform values
- Maximum constraint inputs to ensure no integer overflow or TLE
Master the Matrix Pattern
Study the core invariant, step-by-step decision framework, and common interview traps for the Matrix pattern.
How to Recognize This Pattern
- Rows and columns sorted independently — start at a corner
- Top-right corner: left decreases, down increases
Complexity Analysis
Time Complexity
O(m + n)
Space Complexity
O(1)