题解 | #二维数组中的查找#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
第一种方法比较暴力,其实就是顺序遍历,当遇到 target > 目标值的时候则break,节约时间。
public class Solution { public boolean Find(int target, int [][] array) { int jmax = array.length; if(jmax <= 0){ return false; } int imax = array[0].length; if(imax <= 0){ return false; } for(int j=0; j < jmax; j++) { int row[] = array[j]; if(row[0] > target){ break; } for(int i = 0; i < imax; i++) { if(row[i] == target){ return true; }else if(target < row[i]){ break; } } } return false; } }第二种就是利用其的规律,根据题目可知左上角是最小值,右下角为最大值。
那么左下角的值就有一个规律,其上方的值会比它小,其右方的值比它大。
那么就可以从左下角出发,和target对比,如果target比它大,则右移,比它小则上移。
public class Solution { public boolean Find(int target, int [][] array) { int jmax = array.length; if(jmax <= 0){ return false; } int imax = array[0].length; if(imax <= 0){ return false; } for(int i=0,j=jmax-1; i < imax & j >= 0;) { if(target > array[j][i]){ i++; }else if(target < array[j][i]){ j--; }else{ return true; } } return false; } }