参考文章:https://www.cnblogs.com/wuguanglin/p/2dArrayFind.html
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目分析:
题目不难,而且给出的限制也很小,我一开始试试用了暴力逐步循环发现也能通过,但是这题目设计的初衷不是简单的让你用暴力循环查找出来,而是要注意是有顺序的。所以我们查找的起始点最好从二维数组中的中间的点开始,不过为了方便,我们一般都是选择最左下角的那个点作为起始点,也就是a[array.lenth][0],比它大就往右边走,比它小就往上面走。话不多说,上代码。
代码:
function Find(target,array){
//计算行数和列数
const n = array.length;
const m = array[0].length;
//初始的行和列,也就是寻找的起始点
let row = n-1;
let col = 0;
if (m === 0 && n === 0) {
return false;
}
//比较寻找的起始点array[row][col]与目标大小,如果大于就减少一行(row--)
//如果小于就多加一列(col++),直到找到返回true
while(row >= 0 && col <= m-1){
if(array[row][col] > target ){
row--;
}else if(array[row][col] < target ){
col++;
}else{
return true;
}
}
}