剑指offer-二维数组查找
二维数组中的查找
https://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e
二维数组的查找
问题
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
由于每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。所以 二维数组右上角比左及左下角的数大;可以取数组的右上角进行比较:
若查找目标比右上角数小,那么查找目标一定不在所取右上角数的下方或右下方,继续取所取右上角数左边相邻元素( target < 所取右上角数 < 右上角数右下方数);若查找目标比右上角数大,即所取右上角数比查找目标小,所取右上角数左边也比ta小,( 右上角左边数 < 右上角数 < target );
通过一步步缩小查找的数组,最后得出结果。
代码
public class Solution { public boolean Find(int target, int [][] array) { if(array == null) return false; if(array.length == 0) return false; if(array[0].length == 0) return false; int rows = array.length, columns = array[0].length; int row = 0, column = columns-1; while(row<rows && column >= 0){ if(target == array[row][column]) return true; else if(target < array[row][column]) column--; else row++; } return false; } }
犯错
Java的数组长度为0也能被实例化,未考虑此处导致产生空指针异常。