# 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
# 思考:
根据题意已知,二维数组从左往右递增,从上往下递增,所以得出以下结论:
某列的某个数字,该数之上的数字,都比其小; 某行的某个数字,该数右侧的数字,都比其大; 所以,解题流程如下所示:
以二维数组左下角为原点,建立直角坐标轴。 若当前数字大于了查找数,查找往上移一位。 若当前数字小于了查找数,查找往右移一位。
var findNumberIn2DArray = function(matrix, target) {
// 设置边界
if(!matrix.length) return false;
// 初始化右下角设置坐标
let x = matrix.length - 1, y = 0;
// 当x轴大于等于0 && y轴小于二维数组长度
while(x >= 0 && y < matrix[0].length ){
// 如果当前值 大于 目标值
if(matrix[x][y] === target){
return true;
}else if(matrix[x][y] > target){
// x轴上移
x--;
}else{
y++;
}
}
return false;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19