前两天一面的原题,二分做法复杂度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;
}
}

本文对比了两种在二维数组中查找特定数值的算法,一种使用二分搜索导致O(nlogm)复杂度,另一种采用改进的遍历方法将时间复杂度降低到O(n+m)。重点讨论了如何通过迭代优化搜索过程以提升效率。
679

被折叠的 条评论
为什么被折叠?



