You are given an m x n integer matrix matrix with the following two properties:
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.lengthn == matrix[i].length1 <= m, n <= 100-104 <= matrix[i][j], target <= 104class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size(), n = matrix[0].size();
// if(!m || !n) return false;
int lo=0, hi=m*n-1, mid, i, j;
while(lo<=hi){
mid = (lo+hi)/2;
i=mid/n, j=mid%n;
if(target==matrix[i][j])
return true;
else if(target<matrix[i][j])
hi = mid-1;
else lo = mid+1;
}
return false;
}
};class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length, lt = 0, rt = m * n - 1;
while (lt <= rt) {
int mid = (lt + rt) / 2;
int i = mid / n, j = mid % n;
if (target == matrix[i][j])
return true;
else if (matrix[i][j] < target)
lt = mid + 1;
else
rt = mid - 1;
}
return false;
}
}