二维数组查找

二维数组中的查找

http://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e

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

思路
1.暴力迭代
时间赋值度:O(nm),空间复杂度:O(nm)

using namespace std;
class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        for(vector<vector<int>>::iterator col = array.begin();col!=array.end();++col){
            for(vector<int>:: iterator row = (*col).begin();row != (*col).end();++row){
                if(*row == target){
                    return true;
                }
            }
        }
        return false;
    }
};//10ms,1492k

2.暴力迭代其实就是遍历搜索,由于整个举证是有序的,考虑折半的思想,但矩阵二维平面怎么折半?(思考一),(思考过程待整理补充)
时间复杂度:O(m+n),空间复杂度:O(n*m)

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int row = 0;
        int col = array.size() - 1;
        while(row < array[0].size() && col >= 0 && array[col][row] != target){
            while(row < array[0].size() &&  col >= 0 && array[col][row] < target){
                cout<<array[col][row]<<endl;
                ++row;
            }
            while(row < array[0].size() && col >= 0 && array[col][row] > target){
                cout<<array[col][row]<<endl;
                --col;
            }
        }
        cout<<col<<" "<<row<<endl;
        if(col < 0 || row == array[0].size()){
            return false;
        }
        else{
            return true;
        }
    }
};///9ms,1380k
全部评论

相关推荐

每晚夜里独自颤抖:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务