二维数组中的查找

来源:互联网 发布:2016年6月我国域名总数 编辑:程序博客网 时间:2024/05/29 18:32

题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路

思路一:顺序遍历该二位数组依次比较大小,很显然该方法不可取;
思路二:由于数组每行都是递增的,因此对每行元素查找可以采用二分法,但是该思路并不是最优方法;
思路三:前两种思路都是从左上角元素出发,依次比较,如果换个思维从左下角或者右上角出发呢?从左下角出发,则当要查找数字比左下角数字大时右移,当要查找数字比左下角数字小时,上移,即可。代码如下:
public class Algorithm01 {    public static void main(String []args){        int [][]array = {                {11,13,15,17,19},                {21,23,25,27,29},                {31,33,35,37,39},                {41,43,45,47,49},        };        System.out.println(find(35, array));    }    public static boolean find(int target, int [][] array) {        boolean isFind = false;        if(array == null || array.length == 0 || array[0].length == 0){            return isFind;        }        int lenI = array.length;        // 二维数组的行数        int lenJ = array[0].length;     // 二维数组的列数        int i=lenI-1, j=0;        do{            if(target == array[i][j]){                isFind = true;            }else if(target < array[i][j]){                i--;            }else{                j++;            }        }while (i>=0 && j<lenJ && !isFind);        return  isFind;    }}