题解 | #二维数组中的查找#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
二维数组的查找
既然给出了两个条件:
由左到右递增 / 由上到下递增。总不能那么暴力遍历完两次就解决战斗吧。所以,还是得好好想想怎么利用好这两个条件。
思路代码如下:
/* 思路:从左下角开始找,设左下角值为m,因为左下角是一行中的最小值/一列中的最大值。 target>m,就要往右边找,因为上边的数更小了; target<m,就要往上边找,因为右边的数更大了; target=m,找到了目标值。 直至找到了上/右边界,还是没有找到,那就是没有啦。 */ public class Solution { public boolean Find(int target, int [][] array) { int rowLength = array[0].length; int colLength = array.length; if(rowLength==0 || colLength==0){ return false; } //左下角坐标 int row=(colLength-1),col=0; //往右上找 while(row>=0&&col<rowLength){ if(target == array[row][col]){ return true; }else if(target > array[row][col]){ col++; }else{ row--; } } return false; } }
时间复杂度: O(m+n)