前言

最近在看牛客网的面试题, 发现在剑指offer 里面的好多题,网上不怎末容易找到答案, 那就我自己做个记录吧,也权当为同行们提供个参考, 由于是初次写, 所以不好的地方还望见谅。

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
个人感觉利用es6 数组方法some 查询起来可能更简单, 实际运行时间:142ms占用内存:11028k
function Find(target, array)
{
   return array.some(item => {
        return item.some(items => {return items === target}) === true
    })

}
module.exports = {
    Find : Find
};

网友方法

原理上基本类似,先比较大小然后查询具体的行

function Find(target, array) {

    let i = 0
    let j = array[i].length - 1
    let min = array[0][0]
    let max = array[array.length-1][array[0].length-1]

    if (target < min || target > max)
        return false

    while (i < array.length && j >= 0) {
        if (array[i][j] < target) {
            i++
        } else if (array[i][j] > target) {
            j--
        } else {
            return true
        }
    }
    return false
}
02-14 03:09