题解 | #二维数组中的查找#
二维数组中的查找
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;
}
}
