JS 1
非预期解法
/**
* @param {number[][]} matrix
* @param {number} target
* @return {boolean}
*/
var findNumberIn2DArray = function(matrix, target) {
let arr = matrix.flat(Infinity);
for(let i of arr){
console.log(i)
if(i == target){
return true;
}
}return false;
};
给二维数组平坦化,然后遍历找目标(这里我忘了.includes()函数了)
运行速度极慢,并没有体现算法思维、
JS 2
螃蟹走法
/**
* @param {number[][]} matrix
* @param {number} target
* @return {boolean}
*/
var findNumberIn2DArray = function(matrix, target) {
if(matrix&&matrix[0]){
let row = matrix.length-1;
let column = matrix[0].length-1;
let r = 0;
let c =column;
while(r<=row&&column>=0){
if(matrix[r][c]==target){
return true;
}else if (matrix[r][c]>target){
c--;
}else {
r++;
}
}return false;
}
else return false;
};
这是书上的思路,从右上角开始走,若大于目标值,就排除掉该列,往左走一个,若小于目标值,即排除掉该行,往下走一列,直到走完或找到目标为止。
不要忘记判断空数组的条件
时间复杂度
O(m+n)
空间复杂度
O(1)