[leetcode]Search a 2D Matrix

来源:互联网 发布:财务金融知乎 编辑:程序博客网 时间:2024/04/30 23:24

问题描述:

Write an efficient algorithm that searches for a value in anm 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, returntrue.


基本思路:

二分查找。


代码:

    bool searchMatrix(vector<vector<int> > &matrix, int target) {  //C++        int rows = matrix.size();        if(rows == 0)            return false;        int cols = matrix[0].size();                int low = 0, high = rows*cols-1;        int i,j;        while(low <= high)        {            int mid = (low + high)/2;            i  = mid/cols;            j = mid%cols;                        if(matrix[i][j] == target)                return true;            if(matrix[i][j] < target)                low = mid +1;            else high = mid -1;                                    }        return false;    }


0 0