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

题目描述


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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值