如题:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
时间小于等于2s 所占内存小于等于64M
解题思路:
左下角开始与target整数比对 如果大于target 向上走 小于target向右走遍历
利用从左到右递增 从上到下递增的特点。从左下角开始 只会越来越大或者越来越小不会分叉。
代码奉上:
public boolean Find(int target, int [][] array) {
int x = array.length;//行数
if(array == null || array.length==0 || array[0].length ==0){
return false;
}
//array[m][n]即第m+1行 n+1列
int indexX = x-1;//起始纵坐标索引
int indexY = 0;//起始横坐标索引
//从左下角开始向右或者向上比对
return doCompare(target, indexX, indexY, array);
}
private boolean doCompare(int target, int indexX, int indexY, int array[][]) {
if(target > array[indexX][indexY]){
++ indexY;
if(indexY > array[indexX].length-1){
return false;
}
return doCompare(target, indexX, indexY, array);
}else if(target < array[indexX][indexY]){
-- indexX;
if(indexX < 0){
return false;
}
return doCompare(target, indexX, indexY, array);
} else {
return true;
}
}