1.二维数组的查找
-
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如
[1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15]
第一种方法:对二维矩阵进行遍历,如果含有该整数则返回true,否则返回false,此方法时间复杂度为O(rows*cols)
牛客网评测
运行时间:196ms
占用内存:17440k
public boolean Find(int target, int [][] array) {
if(array==null || array.length==0 || array[0].length==0)
return false;
int rows=array.length;
int cols=array[0].length;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(array[i][j]==target)
return true;
}
}
return false;
}
第二种方法:可跟据二维矩阵的特点,从某一点开始判断,但由于从中间位置判断会发生位置重叠,所以从左下点或者右上点开始判断,例如从左下点开始,若该整数比目标值小,则向上走,若该整数比目标值大,则向右走,该方法时间复杂度为O(rows+cols)。
牛客网评测
运行时间:186ms
占用内存:18108k
public boolean Find(int target, int [][] array) {
if(array==null || array.length==0 || array[0].length==0)
return false;
int rows=array.length;
int cols=array[0].length;
int i=rows-1;
int j=0;
while(i>=0 && j<cols)
{
if(target==array[i][j])
return true;
else if(target<array[i][j])
i--;
else
j++;
}
return false;
}