Search a 2D Matrix

这道题有两种解法,第一种最好想吧,2次两分法,第二种是维度变换

详细解释ref http://www.cnblogs.com/springfor/p/3857959.html

public class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix==null || matrix.length==0 || matrix[0].length==0) return false;
        int low = 0, high = matrix.length-1;
        while(low<=high){
            int mid = (low+high)/2;
            if(target==matrix[mid][0]){
                return true;
            } 
            else if(target < matrix[mid][0]){
                high = mid-1;
            }else{
                low = mid+1;
            }
        }
        int row = (high+low)/2; // 这个细节要想清楚
        low = 0;
        high = matrix[0].length-1;
        while(low<=high){
            int m = (low+high)/2;
            if(matrix[row][m]== target) {
                return true;
            }else if(matrix[row][m]> target){
                high = m-1;
            }else{
                low = m+1;
            }
        }
        return false;
    }
}

 

posted @ 2015-04-16 06:19  世界到处都是小星星  阅读(105)  评论(0编辑  收藏  举报