Optimal: one virtual array
Time O(log(m·n)) Space O(1)Search indexes 0 to m·n − 1; value at index i is matrix[i / n][i % n].
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int lo = 0, hi = m * n - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
int v = matrix[mid / n][mid % n];
if (v == target) return true;
if (v < target) lo = mid + 1;
else hi = mid - 1;
}
return false;
}
}Verdict: A single binary search.