js实现二维数组的查找--牛客

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github

1 题目

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

2 解答

该二维数组中的一个数,小于它的数一定在其左(和上)边,大于它的数一定在其下(和右)边。因此,从右(左小角)上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,当前元素的查找区间为左下角的所有元素。

关键点:从左下角或者右上角开始查找

function Find(target, array)
{
    //有序二维数组的查找
    /*从左下角开始查找,该二维数组中的一个数,小于它的数一定在其上边,大于它的数一定在右边。
    因此,从左角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,
    * 关键点:从左下角或者右上角开始查找*/
    if (array === null || array.length === 0 || array[0].length === 0){
        return false;
    }
    let i = array.length - 1; //i表示行,初始化为最后一行
    let j = 0;    //j表示列,初始化为第一列
    while(i >= 0 && j < array[i].length ){
        if(target === array[i][j]){
            return true;
        }else if(target > array[i][j]){
            j++;  //右边
        }else {
            i--; //上边
        }
    }
    return false;
}

百里于2020年3月22日

参考:

GitHub:https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92.md#%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97

如果有错,请您指出!如有侵权,请联系我删除!

你可能感兴趣的:(#,javascript,node.js)