74. Search a 2D Matrix
Problem Statement
You are given an m x n
integer matrix matrix
with the following two properties:
Each row is sorted in non-decreasing order.
The first integer of each row is greater than the last integer of the previous row.
Given an integer target
, return true
if target
is in matrix
or false
otherwise.
You must write a solution in O(log(m * n))
time complexity.
Example 1:
Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
Output: true
Example 2:
Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
Output: false
Constraints:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
Intuition
Approach:
Treating the entire 2D array as one
Now, using mid/n, mid%n
Trick acces the elemets
Links
https://leetcode.com/problems/search-a-2d-matrix/description/
Video Links
https://www.youtube.com/watch?v=JXU4Akft7yk&ab_channel=takeUforward
Approach 1:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int low=0, high=matrix.size()*(matrix[0].size())-1;
int n=matrix[0].size();
while(low<=high){
int mid=low+(high-low)/2;
if(matrix[mid/n][mid%n]==target)
return true;
else if(matrix[mid/n][mid%n]<target)
low=mid+1;
else
high=mid-1;
}
return false;
}
};
Approach 2:
Approach 3:
Approach 4:
Similar Problems
Last updated