【剑指Offer】二维数组中的查找$2.3.1

来源:互联网 发布:原生js手风琴效果原理 编辑:程序博客网 时间:2024/06/11 19:25

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

private boolean find(int[][] arr, int row, int col, int key) {    if (arr == null) {        throw new IllegalArgumentException("给定数组不能为空");    }    if (row <= 0 || col <= 0) {        throw new IllegalArgumentException("给定非法行值列值row:" + row + ", col:" + col);    }    for (int i = 0; i < row; i++) {        //从每行的最大值的列开始        for (int j = col - 1; j >= 0; j--) {            //如果该值等于            if (arr[i][j] == key) {                return true;            }            //如果该值小于key            else if (arr[i][j] < key) {                //那么该行比他更小的都应该丢弃掉                break;            }            //如果该值大于key            else if (arr[i][j] > key) {                //该列以下已经没有符合key要求的了,col-1                col--;            }        }    }    return false;}@Testpublic void runWithMe() {    int key = -1;    int len = 4;    int[][] arr = new int[][]{            {1, 2, 8, 9},            {2, 4, 9, 12},            {4, 8, 10, 13},            {7, 10, 11, 14}    };    System.out.println("数组中有包含吗:\n" + find(arr, len, len, key));}