【剑指Offer第一题】二维数组的查找
admin
2023-02-14 19:40:03
0

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

注:设二维数组为m行n列。语言:C++


解法1:顺序查找

    bool Find(int target, vector > array) {
        vector >::iterator i;
        vector::iterator j;
        vector k;
        for(i = array.begin(); i != array.end(); ++i)
        {
            k = *i;
            for(j = k.begin(); j != k.end(); ++j)
            {
                if(*j == target)
                    return true;
            }
        }
        return false;
    }

时间复杂度O(mn),空间复杂度O(1)。


解法2:折半查找

        bool Find(int target, vector > array) {
        if(array.empty())
            return false;
        int row = array.size();
        int col = array[0].size();
        for(int i = 0; i < row; ++i)
        {
            if(array[i].empty())
                return false;
            int low = 0;
            int high = col-1;
            if(target == array[i][low])
                return true;
            if(target == array[i][high])
                return true;
            while(low <= high)
            {
                int mid = low + (high - low) / 2;
                if(target == array[i][mid])
                   return true;
                else if(target < array[i][mid])
                   high = mid - 1;
                else
                   low = mid + 1;
            }
        }
        return false;
    }

时间复杂度O(mlogn),空间复杂度O(1)。


解法三:根据数组有序特性,从其右上角元素开始比较。

 bool Find(int target, vector > array) {
        if(array.empty())
            return false;
        int row = array.size();
        int col = array[0].size();
        int i = 0;
        int j = col - 1;
        while((i < row) && (j >= 0))
        {
            if(array[i].empty())
                return false;
            if(target == array[i][j])
                return true;
            else if(target < array[i][j])
                j--;
            else
                i++;
        }
        return false;
    }

时间复杂度O(m+n),空间复杂度O(1)

相关内容

热门资讯

中美频繁高层互动,菲律宾好自为... 7月24日,菲律宾组织7艘公务船、3艘海警舰、1艘运鱼船,并唆使大量渔船位中国黄岩岛管辖海域非法聚集...
被要求补税2250万欧元的法国... ·贝尔纳·阿尔诺。(LVMH官网)他的“帝国”离不开这个国家的形象加持,而这个国家,也早已吃定了这一...
通派龙湖御潮云上:当极核地段遇... 在2026年的郑州楼市版图中,如果要寻找一个能够同时承载“主城确定性”与“产品革新力”的坐标,通派龙...
追光引路人—记国家级线上线下混... 人物名片:吴建丽,教授,黄河科技学院医学部教师。主持国家级线上线下混合式一流课程1门、河南省线上线下...
加总理表态:若谈判破裂,会对美... 据凤凰卫视报道,7月23日,加拿大总理卡尼与各省省长和地区领导人举行会议,商讨应对美国最新一轮关税威...
从北京望中东:和平,虽远在中国... ◆笔者参与的分论坛“维护中东和平:挑战与出路”正在进行中。今年7月举行的第十四届世界和平论坛上,中东...
巨大冲击!美国AI“闭源高价售... 日本计算机社会学专家塚越健司7月24日发表题为《中国AI“Kimi K3”引发巨大冲击——撼动美国A...
人民锐评:中国籍数学家首获全球... 历史性的突破!日前,第二十一届菲尔兹奖得主名单揭晓,北大2007级本科校友王虹、邓煜双双获奖,无数网...
深度专访|网易智企段毓铮:不敢... 企业AI的商业化,难点在于让客户敢用、会用、用得有效果。在WAIC现场,搜狐AI邀请到网易智企副总经...
来论|从“菲尔兹奖”,看见科技... 王虹、邓煜分别凭借在调和分析与几何测度论、偏微分方程与数学物理领域的突破性工作,共同荣获2026年菲...