[LeetCode] 74. Search a 2D Matrix

来源:互联网 发布:lca算法建模 编辑:程序博客网 时间:2024/05/23 13:07

[LeetCode] 74. Search a 2D Matrix


Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,

Consider the following matrix:

[
  [1, 3, 5, 7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]

Given target = 3, return true.


在一个行间有序,行与行也是有序的一个二维数组matrix中查找target。
思路: 现在第一列中二分查找target落在哪一行,然后再在行上二分查找target即可。
复杂度为O(log(m)+log(n)),本以为比把matrix当作一维数组直接二分效率要高,然后算了一下复杂度为O(log(m*n)) == O(log(m)+log(n))。
- -。


class Solution {public:    bool searchMatrix(vector<vector<int>>& matrix, int target) {        int leni = matrix.size();        if (leni == 0) {            return false;        }        int lenj = matrix[0].size();        if (lenj == 0) {            return false;        }        int lidx = 0;        int ridx = leni-1;        while (lidx < ridx) {            int midx = (lidx+ridx)/2+1;            if (target > matrix[midx][0]) {                lidx = midx;            } else if (target < matrix[midx][0]) {                ridx = midx-1;            } else {                return true;            }        }        int rowi = lidx;        lidx = 0;        ridx = lenj-1;        while (lidx <= ridx) {            int midx = (lidx+ridx)/2;            if (target > matrix[rowi][midx]) {                lidx = midx+1;            } else if (target < matrix[rowi][midx]) {                ridx = midx-1;            } else {                return true;            }        }        return false;    }};
0 0
原创粉丝点击