牛客 剑指offer二维数组中的查找
题目
时间限制:1秒 空间限制:32768K 热度指数:1421035 本题知识点: 查找 数组 算法知识视频讲解 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
这道题固然可以直接使用暴力法解决,但是这里就不说暴力法了
对于这道题,我们可以从左下或者右上来遍历,对于这两个位置,要么是行最大列最小,要么是列最大行最小,所以每次我们将该位置的数与目标值做比较时,就可以往列或行的其中一个方向移动,以左下为例 当数值>target时,往上移动 当数值<target时,往右移动 当数值=target时,返回true 右上同理
代码
暴力法
function Find(target, array) { for(let i=0;i<array.length;i++){ for(let j=0;j<array[0].length;j++){ if(array[i][j]===target){ return true; } } } return false; } module.exports = { Find : Find };
左下/右上遍历
function Find(target, array) { // write code here let row=array.length-1; let col=0; while(row>=0&&col<array[0].length){ if(array[row][col]===target){ return true; }else if(array[row][col]>target){ row--; }else{ col++; } } return false; } module.exports = { Find : Find };