Leetcode题集——search-a-2d-matrix

来源:互联网 发布:淘宝直播间打字在哪 编辑:程序博客网 时间:2024/05/22 12:42

题目描述


Write an efficient algorithm that searches for a value in an m x nmatrix. 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)    {       int low=0,high=matrix.size();       int mid;               //对行首元素进行二分查找       while(low<=high)       {         mid=(low+high)/2;         if(matrix[mid][0]==target) return true;         if(matrix[mid][0]>target) high=mid-1;         if(matrix[mid][0]<target)         {           if(mid==matrix.size()-1||matrix[mid+1][0]>target)               break;//当检索到最后一行或者目标值小于本行,大于下一行           else               low=mid+1;         }       }        //确定行之后,对该行进行二分查找        low=1;high=matrix[0].size()-1;        int m;        while(low<=high)        {           m=(low+high)/2;           if(matrix[mid][m]==target) return true;           if(matrix[mid][m]>target)  high=m-1;           if(matrix[mid][m]<target) low=m+1;                    }        return false;    }


0 0
原创粉丝点击