二维数组中的查找

来源:互联网 发布:网络新技术有哪些方面 编辑:程序博客网 时间:2024/05/22 00:15

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

当我拿到这个题的时候,第一反应是循环,挨个判断不就可以了,看了后面的解析才知道,看来是我太low了。
看看正确的吧,逐步缩小查找范围:

public class TwoDimArry {    public static void main(String[] args) {        int  ayys[][]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};        System.err.println(findNumber(ayys,4,4,10));    }    private static boolean findNumber(int[][] array, int rows, int colums, int num) {        boolean isExit = false;        if (array != null && rows > 0 && colums > 0) {            int row = 0;            int colum = colums - 1;            while (row < rows && colum >= 0) {                if (array[row][colum] == num) {                    isExit = true;                    break;                } else if (array[row][colum] < num) {                    row++;                }else if(array[row][colum] >num) {                    colum--;                }            }        }        return isExit;    }}

整体的思路是先取右上角的最大数,如果比这个数大,那么下一步应该去该数的这一列寻找,比这个数小应该去前一行的第一个数比较,逐步的缩小范围,防止有重复的数字进行过比较。大多数同学在思考的时候就会忽略while中条件,row < rows && colum >= 0这个条件,一般会想不到,或者不知道怎么写。主要是缺乏整体的思考和对自己查询的不知道操作有关系。

原创粉丝点击