前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >28. 搜索二维矩阵二分法

28. 搜索二维矩阵二分法

作者头像
和蔼的zhxing
发布2018-09-04 13:05:45
9650
发布2018-09-04 13:05:45
举报

写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。 样例 考虑下列矩阵:

代码语言:javascript
复制
[[1, 3, 5, 7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]
给出 target = 3,返回 true

二分法

二分法是很容易想到的,先找行,再找列。 这种二分查找应该形成自己的一套写法,二维的就降维处理。 就是写得时候一个小地方的变量写错了,造成了死循环,搞了半个小时不知道错在哪里。还是到VS调试了一下才知道是哪里: 这个就是看着复杂,实际上还是很简单的:

代码语言:javascript
复制
  bool searchMatrix(vector<vector<int>> &matrix, int target) {
        int row_sz=matrix.size();
        if(row_sz<1)
        return false;
        int col_sz=matrix[0].size();
        if(target<matrix[0][0]||target>matrix[row_sz-1][col_sz-1])
        return false;
        int high=0;
        int low=row_sz-1;
        int mid;
        while(high<=low)
        {
            mid=high+(low-high)/2;
            if(matrix[mid][0]==target||matrix[mid][col_sz-1]==target)
            return true;
            else if(matrix[mid][0]<target&&matrix[mid][col_sz-1]>target)   //刚好落在这个区间
            {
                break;
            }
            else if(matrix[mid][0]>target)
            {
                low=mid-1;
            }
            else if(matrix[mid][col_sz-1]<target)
            {
                high=mid+1;
            }
        }
        
        int left=0;
        int right=col_sz-1;
        int col_mid;
        while(left<right)
        {
            col_mid=left+(right-left)/2;
            if(matrix[mid][col_mid]==target)
            {
                return true;
            }
            else if(matrix[mid][col_mid]<target)
            {
                left=col_mid+1;      //就是这里,col_mid写成Mid了,导致死循环,气的很
            }
            else if(matrix[mid][col_mid]>target)
            {
                right=col_mid-1;
            }
        }
        return false;
       // write your code here
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.12.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二分法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档