首页 > 代码库 > 【LeetCode】Search a 2D Matrix

【LeetCode】Search a 2D Matrix

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.

 

思路:纵向二分查找确定target所在行,再进行普通的二分查找。

class Solution {public:    bool searchMatrix(vector<vector<int> > &matrix, int target) {        if(matrix.empty())            return false;        else if(matrix[0].empty())            return false;        else        {            int m = matrix.size();            int n = matrix[m-1].size();            //判断越界            if(matrix[0][0] > target || matrix[m-1][n-1] < target)                return false;                                    //基于行首的二分查找,定位到行            int low = 0;            int high = m-1;            int mid;            int num;            while(low <= high)            {                mid = (low+high)/2;                num = matrix[mid][0];                if(num == target)                    return true;                else if(num > target)                    high = mid-1;                else                    low = mid+1;            }            //短路操防止越界            if(low >= m || matrix[low][0] > target)                low -= 1;            int row = low;                        //第row行内进行二分查找            low = 0;            high = matrix[row].size()-1;            while(low <= high)            {                mid = (low+high)/2;                num = matrix[row][mid];                if(num == target)                    return true;                else if(num > target)                    high = mid-1;                else                    low = mid+1;            }            return false;        }    }};

【LeetCode】Search a 2D Matrix