二维数组中的查找

题目

链接:https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

**Level: ** 剑指offer

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

Note:

  • 时间限制:1秒 空间限制:32768K

代码

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int r=array.size();
        int l=array[0].size();
        int i=r-1;
        int j=0;
        while(i>=0&&j<l)
        {
            if(array[i][j]>target)
                i--;
            else if(array[i][j]<target)
                j++;
            else
                return true;
        }
        return false;
    }
};

思考

  • 时间复杂度为o(m+n),m为行数,n为列数,空间复杂度为o(1)
  • 从左下角元素开始查找,若是大于当前元素,则列下标加1,若是小于当前元素,则行下标减一。
原文地址:https://www.cnblogs.com/zuotongbin/p/10216802.html