【剑指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)

相关内容

热门资讯

今日重大通报“樱花之盛拼三张可... 网上科普关于“樱花之盛拼三张有没有挂”话题很是火热,小编也是针对樱花之盛拼三张作*弊开挂的方法以及开...
重磅消息“毛豆大厅牛牛真的有挂... 有 亲,根据资深记者爆料毛豆大厅牛牛是可以开挂的,确实有挂(咨询软件无需...
终于明白“樱花之盛牛牛怎么开挂... 网上科普关于“樱花之盛牛牛有没有挂”话题很是火热,小编也是针对樱花之盛牛牛作*弊开挂的方法以及开挂对...
今日重大消息“闽游麻将拼多多可... 家人们!今天小编来为大家解答闽游麻将拼多多透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪...
今日重磅消息“新天天游戏有挂吗... 今日重磅消息“新天天游戏有挂吗?”(其实是有挂)您好,新天天游戏这个游戏其实有挂的,确实是有挂的,需...
终于了解“天蝎炸/金/花究竟有... 终于了解“天蝎炸/金/花究竟有挂吗?”(外卦神器下载)您好,天蝎炸/金/花这个游戏其实有挂的,确实是...
重磅消息“欢乐时光怎么开挂?”... 网上科普关于“欢乐时光有没有挂”话题很是火热,小编也是针对欢乐时光作*弊开挂的方法以及开挂对应的知识...
玩家最新攻略“天天十三水究竟有... 家人们!今天小编来为大家解答天天十三水透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里买...
重磅消息“顺欣茶楼到底有挂吗?... 有 亲,根据资深记者爆料顺欣茶楼是可以开挂的,确实有挂(咨询软件无需打开...
重磅消息“聚友互娱可以开挂吗?... 重磅消息“聚友互娱可以开挂吗?”(太坑了果然有挂)您好,聚友互娱这个游戏其实有挂的,确实是有挂的,需...