Search a 2D Matrix
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) { //corner case
return false;
}
int m = matrix.length;
int n = matrix[0].length;
int left = 0;
int right = m * n - 1; //initiate left and right
while (left + 1 < right) {
int midIdx = left + (right - left) / 2;
int midElement = matrix[midIdx / n][midIdx % n];//matrix row & col
if (midElement == target) {
return true;
} else if (midElement < target) {
left = midIdx;
} else {
right = midIdx;
}
}
if (matrix[left / n][left % n] == target) {
return true;
} else if (matrix[right / n][right % n] == target) {
return true;
}
return false;
}
}
Time Complexity : O(logmn);
Space Complexity : O(1);
最后更新于
这有帮助吗?