题目
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例
现有矩阵 matrix 如下:
自己的想法
- 就是直接二重for循环遍历,本来想着,可能也会因为复杂度太大可能会不太行,但是没想到竟然通过了?奇妙~
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
if(target==matrix[i][j]){
return true;
}
}
}
return false;
}
}
-
运行速度还挺快的
-
明天看看题解,还有没有其他想法了~
-
2021年1月24日17:31:02,看了题解后,有一个想法
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
//总行数
int hangs = matrix.length;
//首先判断一下,二维数组是否为空,这个之前我是没加的,执行代码的时候没问题,但是提交的时候,就会出问题,提交的测试用例中有空数组。
if(hangs==0){
return false;
}
//总列数
int lies = matrix[0].length;
//这个是定义到第一行最后一个数字
int hang = 0;
int lie = lies - 1;
System.out.println("总行数"+hangs);
System.out.println("总列数"+lies);
//判断条件:抵达该数组的最后一行第一列
while(hang<hangs&&lie>=0){
//目标<该位置的数字,列数减小
if(target<matrix[hang][lie]){
lie--;
//目标>该位置的数字,行数增大
}else if(target>matrix[hang][lie]){
hang++;
}else{
//找到该数字
return true;
}
}
return false;
}
}
- 若没加判断空数组的条件,提交时会出错
if(hangs==0){
return false;
}
- 注:但是没想到的是,我以为第二个方法线性法,会更快一点,但是运行时间还没有第一个暴力解法快。。。。第一个0ms,第二个9ms?