剑指 Offer04. 二维数组中的查找
题目:
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]
给定 target = 5,返回 true。
给定 target = 20,返回 false。
限制:
0 <= n <= 1000
0 <= m <= 1000
1 //利用Arrays类二分查找法,快速从每一行查找,共需查找n次 2 class Solution { 3 public boolean findNumberIn2DArray(int[][] matrix, int target) { 4 if(matrix==null || matrix.length==0 || matrix[0].length==0 ){return false;} 5 int[] arr; 6 for(int i=0;i<matrix.length;++i){ 7 arr=matrix[i]; 8 if(Arrays.binarySearch(arr,target)>=0){ 9 return true; 10 } 11 } 12 return false; 13 } 14 }

1 //从右上角看,数组为二叉排序树 2 class Solution { 3 public boolean findNumberIn2DArray(int[][] matrix, int target) { 4 if(matrix==null || matrix.length==0 || matrix[0].length==0 ){return false;} 5 int n=0; 6 int m=matrix[0].length-1; 7 while(n<matrix.length&&m>=0){ 8 if(matrix[n][m]==target){return true;} 9 else if(matrix[n][m]>target){m--;} //目标值比数组值小,左移一位(m--) 10 else{n++;} //目标值比数组值大向下移(n++) 11 } 12 13 return false; 14 } 15 }

浙公网安备 33010602011771号