前两天一面的原题,二分做法复杂度nlogm
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int n = matrix.length;
if(n == 0) {
return false;
}
int m = matrix[0].length;
if(m == 0) {
return false;
}
for(int i = 0;i < n && matrix[i][0] <= target;i++) {
int index = Arrays.binarySearch(matrix[i], target);
if(index >= 0) {
return true;
}
}
return false;
}
}
时间复杂度O(n+m),应该是最优解
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int n = matrix.length;
if(n == 0) {
return false;
}
int m = matrix[0].length;
if(m == 0) {
return false;
}
// 开始的行号和列号
int stx = 0;
int sty = m - 1;
while(stx < n && sty >= 0) {
if(matrix[stx][sty] == target) {
return true;
}
if(matrix[stx][sty] > target) {
sty--;
} else {
stx++;
}
}
return false;
}
}