Search a 2D Matrix -- LeetCode

原题链接: http://oj.leetcode.com/problems/search-a-2d-matrix/ 
这道题是二分查找Search Insert Position的题目。由于矩阵是行有序而且列有序。查找仅仅须要先按行查找。定位出在哪一行之后再进行列查找就可以,所以就是进行两次二分查找。时间复杂度是O(logm+logn),空间上仅仅需两个辅助变量,因而是O(1),代码例如以下:
public boolean searchMatrix(int[][] matrix, int target) {
    if(matrix == null || matrix.length==0 || matrix[0].length==0)
        return false;
    int l = 0;
    int r = matrix.length-1;
    while(l<=r)
    {
        int mid = (l+r)/2;
        if(matrix[mid][0] == target) return true;
        if(matrix[mid][0] > target)
        {
            r = mid-1;
        }
        else
        {
            l = mid+1;
        }
    }
    int row = r;
    if(row<0)
        return false;
    l = 0;
    r = matrix[0].length-1;
    while(l<=r)
    {
        int mid = (l+r)/2;
        if(matrix[row][mid] == target) return true;
        if(matrix[row][mid] > target)
        {
            r = mid-1;
        }
        else
        {
            l = mid+1;
        }
    }   
    return false;
}
二分查找是面试中出现频率不低的问题,可是非常少直接考二分查找。会考一些变体,除了这道题。还有Search in Rotated Sorted ArraySearch for a Range。思路事实上差点儿相同,略微变化一下就可以。有兴趣能够练习一下哈。
posted @ 2017-08-10 09:08  brucemengbm  阅读(139)  评论(0编辑  收藏  举报