出鞘之剑指offer-第4题 (二维数组中的查找)

题目

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

 分析一

最基础的,就立马想到全都遍历一遍

代码一

 

package offer.xzs.fourth;

public class BaseCode {
    public static void main(String[] args) {
        int[][] array = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        boolean b = searchNumber(array, 7);
        System.out.println(b);
    }

    private static boolean searchNumber(int[][] array, int n) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[0].length; j++) {
                if (array[i][j] == n) {
                    return true;
                }
            }
        }
        return false;
    }
}

分析二

 从右上角想左下角遍历

代码二

package offer.xzs.fourth;

public class AlgrithomOne {
    public static void main(String[] args) {
        int[][] array = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        boolean b = searchNumber(array, 15);
        System.out.println(b);
    }
    private static boolean searchNumber(int[][] array, int n) {
        if (array == null) {
            return false;
        }
        int row = 0;
        int col = array[0].length - 1;
        while (row < array.length && col >= 0) {
            if (array[row][col] == n) {
                return true;
            } else if (array[row][col] > n) {
                col--;
            } else {
                row++;
            }
        }
        return false;
    }
}

分析三 

从左下角到右上角

代码三 

 

package offer.xzs.fourth;

public class AlgrithomTwo {
    public static void main(String[] args) {
        int[][] array = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        boolean b = searchNumber(array, 5);
        System.out.println(b);
    }
    private static boolean searchNumber(int[][] array, int n) {
        if (array == null) {
            return false;
        }
        int row = array.length - 1;
        int col = 0;
        while (col < array[0].length && row >= 0) {
            if (array[row][col] == n) {
                return true;
            } else if (array[row][col] < n) {
                col++;
            } else {
                row--;
            }
        }
        return false;
    }
}

 

你可能感兴趣的:(剑指offer)