二维数组的查找
在一个 n * m 的二维数组中,每一行都依照从左到右递增的程序排序,每一列都依照从上到下递增的程序排序。请实现一个高效的函数,输出这样的一个二维数组和一个整数,判断数组中是否含有该整数。
暴力解法
就是遍历 mn 次,找到对应 target,返回 true 或者 false,工夫复杂度为 O(NM)。暴力法未利用矩阵“从上到下递增、从左到右递增”的特点,显然不是最优解法。
二叉树解法
利用从左到右递增,从上到下递增
向左旋转 45,找右上角或者左下角,依照二叉树做,
右上角 往下递增,往左递加,
左下角 往上递加,往右递增。
这样只须要判断以后值和目标值谁打谁小,判断怎么走(去新的一行或者列,)大体趋势,而后到下一个值再判断和目标值的大小,再走,这样省工夫也缩小运算量。
matrix.length // 矩阵行数
matrix[0].length // 矩阵列数
不能疏忽输出的数组如果是 空数组,要写一个判断
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return false;}