Live2D

二维数组中的查找(Java)

/*
* 
*   题目描述
    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
    示例1
    输入
        7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
    返回值
        true
* 
* */
public class FindInArray {

    public boolean Find(int target, int [][] array) {
        int length = array[0].length;//获取每行的长度
        int length1 = array.length;
        if(length<=0||length1<=0){//注意特殊情况
            return false;
        }
        if(array==null){  //注意特殊情况  
            return false;
        }

        for(int i =0; i<array.length;i++){
            if(target<array[i][length-1]){
                //如果小于每行最大的那个
                //折半查找
                if(binaryFind(array[i],target)){
                    return true;
                }
            }else if(target==array[i][length-1]){
                return true;
            }
        }
        return false;
    }
    public boolean binaryFind(int[] a, int tar){
        //折半查找
        if(a.length==0){
            return false;
        }
        int low = 0;
        int high = a.length-1;
        int center = (low + high) / 2;

        while(low <= high){
            if(tar==a[center]){
                return true;
            }else if(tar>a[center]){
                //往右找
                low = center+1;
                center = (low + high) / 2;
            }else if(tar<a[center]){
                //往左找
                high = center-1;
                center = (low + high) / 2;
            }
        }
        return false;


    }
}
posted @ 2021-01-18 23:03  细雪之舞0213  阅读(69)  评论(0)    收藏  举报