二维数组中的查找
问题描述
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1, 6, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[11, 13, 14, 17, 24],
[12, 21, 23, 26, 30]
]
目标:8
思路
判断是否二维数组存在,
在二维数组中,x轴为增量,需上限。y轴为减量,需下限。
选取左下方值为当前值,
遍历二维数组,
目标值大于当前值,当前值需增值,向右增值,
目标值小于当前值,当前值需减值,向上减值。
当前值等于目标值,返回true。
超限,返回false。
复杂度
最差情况下,为左下角搜索到右上角,为矩形的长宽之和。
代码
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
//判断二维数组是否存在
if(matrix.length==0)
return false;
int x=0;
int y=matrix.length-1;
//在二维数组内查值
while(x<matrix[0].length&&y>=0){
if(target>matrix[y][x]){
x++;
}else if(target<matrix[y][x]){
y--;
}else{
return true;
}
}
return false;
}
}