Search a 2D Matrix

来源:互联网 发布:西门子数控仿真软件 编辑:程序博客网 时间:2024/05/23 14:33

Search a 2D Matrix


我的思路:

1、在一个排好序的二维数组中找目标数,返回成功或者失败。

2、二分查找,首先在列上找值,定位到哪一行之后,在行内二分查找。复杂度是log(n) + log(m)。

代码如下:

   bool searchMatrix(vector<vector<int> > &matrix, int target) {    int n = matrix.size();    int m = matrix[0].size();    int i = 0;    int j = n - 1;    int mid1;        while (i <= j) {    mid1 = (j - i) / 2 + i;    if (target < matrix[mid1][0])    j = mid1 - 1;    else if (target > matrix[mid1][m - 1])    i = mid1 + 1;    else         break;    }    if (mid1 >= 0 && mid1 < n) {        int g = 0;         int h = m - 1;        while (g <= h) {        int mid = (h - g) / 2 + g;        if (matrix[mid1][mid] < target)        g = mid + 1;        else if (matrix[mid1][mid] > target)        h = mid - 1;        else         return true;        }    }        return false;    }

我的思路2:

1、剑指Offer上的第3题就是这个,看了那边的思路之后,自己写了一个,结果比上面的那个运行速度还要快。

代码如下

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


别人思路:

1、既然都是有序的,那么将二维数组看作一维的来处理,也会加快速度,而且代码会简洁很多,二维到一维的转换只需要使用除法和取余就可以了。

0 0
原创粉丝点击