二维数组中的查找

来源:互联网 发布:复杂sql 语句编写经验 编辑:程序博客网 时间:2024/06/06 07:07

题目描述

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

1 2 34

5 6 78

9 10 1112

13 14 1516

解法1:

利用两层循环遍历整个二维数组,时间复杂度为O(n^2)

解法2:

观察二维数组,发现数组有序,所以如果选择左下角(右上角)的节点,那么目标数当小于这个数的时候我们就向上一行,当目标数大于这个数的时候我们就向右遍历,可以减少一定的遍历次数.

代码如下:

    public boolean Find(int[][] array, int target) {        int row = array.length - 1;        int col = 0;        int end = 0;        while (true) {            if (end < array.length &&                    array[end].length != 0 &&                    target > array[end][array[end].length - 1]) {                end++;            } else {                break;            }        }        while (row >= end && col != array[end].length) {            //首先找到合适的左下角开始点            if (target < array[row][col]) {                row--;            } else if (target > array[row][col]) {                col++;            } else {                return true;            }        }        return false;    }


0 0