当前位置:首页 > 未命名 > 正文内容

【解题报告】【lintcode28】Search a 2D Matrix

u3blog8年前 (2016-06-06)未命名196

题意

写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。 性能要求,时间复杂度O(logm+logn)

解答

两次二分,第一次确定所在行,第二次确定所在列

代码

    public boolean searchMatrix(int[][] matrix, int target) {
        // write your code here
        int m,n,mt = -1,nt = -1;
        if(matrix == null|| matrix.length == 0)return false;
        m = matrix.length;
        n = matrix[0].length;
     
        int h,l,mid;
        l = 0;
        h = m -1;
        while(l <= h&&h >= 0&&l < m){
            mid = (l + h)/2;
            if(matrix[mid][0] > target){
                h = mid - 1;
            }else if(matrix[mid][0] < target&&mid+1<m&&matrix[mid+1][0] < target){
                l = mid + 1;
            }else{
                mt =  mid;
                break;
            }
        }
        if(mt < 0)return false;
        l = 0;
        h = n - 1;
        while(l <= h&&h >= 0&&l < n){
            mid = (l + h)/2;
            if(matrix[mt][mid] > target){
                h = mid - 1;
            }else if(matrix[mt][mid] < target){
                l = mid + 1;
            }else{
                nt =  mid;
                break;
            }
        }
        if (nt < 0)return false;
        return true;
    }

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=446

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。