二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组,判断数组中是否含有该整数
暴力法
思路:直接遍历二维数组中的每行每列,查找数字
时间复杂度:O(n^2)
public class FindInPartiallySortedMatrix {
// 暴力查询 O(n^2)
public boolean findViolence(int[][] array, int n) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (n == array[i][j]) {
return true;
}
}
}
return false;
}
}
二分法
思路:利用题目中给出,从左到右,从上到下递增的顺序排序,可以考虑二分法
时间复杂度:O(nlogn)
public class FindInPartiallySortedMatrix {
public boolean find(int[][] array, int n) {
if (array.length > 0 && array[0].length > 0) {
return findDetail(array, array.length, array[0].length, n);
}
return false;
}
private boolean findDetail(int[][] array, int rows, int columns, int n) {
if (Optional.ofNullable(array).isPresent() && rows > 0 && columns > 0) {
int row = 0;
int column = columns - 1;
while (row < rows && column >= 0) {
int current = array[row][column];
if (n == current) {
return true;
} else if (n < current) {
column--;
} else {
row++;
}
}
}
return false;
}
}