剑指offer-01-二维数组中的查找

前端算法也很重要,受别人☛汕大小吴的启发,觉得还是自己整理记录较为清晰,同时也督促自己不断学习。

题目描述

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

image

题目分析

第一反应是循环遍历,但耗时耗性能。

《剑指Offer》上提及一个区块划分的概念,将二维数组画成矩形,如下图所示,优先对比最右侧的数字信息,若最右侧的第一个>target,则只需要与第一行的数据比较;若=,则即找到;若<,则第一行的所有数据均排除,继续最右侧的下一个数据与target进行比较。

image

代码

function Find(target, array)
{
    // write code here
    let i = 0;
    let j = array[i].length-1;
    for(;i<=array.length-1&&j>=0;){
        if(array[i][j]>target){
            j--;
        }else if(array[i][j]<target){
            i++;
        }else{
            return true;
        }
    }
    return false;
}
原文地址:https://www.cnblogs.com/ShineaSYR/p/9531874.html