牛客 剑指offer二维数组中的查找

题目


时间限制:1秒 空间限制:32768K 热度指数:1421035
本题知识点: 查找 数组
算法知识视频讲解
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路


这道题固然可以直接使用暴力法解决,但是这里就不说暴力法了

对于这道题,我们可以从左下或者右上来遍历,对于这两个位置,要么是行最大列最小,要么是列最大行最小,所以每次我们将该位置的数与目标值做比较时,就可以往列或行的其中一个方向移动,以左下为例
当数值>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
};

你可能感兴趣的:(算法)