剑指offer|剑指offer | 二维数组中的查找

二维数组中的查找 【剑指offer|剑指offer | 二维数组中的查找】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组,判断数组中是否含有该整数
暴力法 思路:直接遍历二维数组中的每行每列,查找数字
时间复杂度: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; } }

    推荐阅读