有序二维数组中的查找

问题描述:

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

 

示例:

array=

{

 {1,2,8,9},

 {2,4,9,12},

 {4,7,10,13},

 {6,8,11,15}

}

target = 7

输出结果应为true  (array包含target)

 

解题思路:

每次拿右上角的数字和target比较,大于剔除列,小于剔除行。

重复上述步骤,直到查找成功或出界。

 

如上例,target=7与数组右上角元素array[0][3]=9比较,7小于9,故去除array最后一列。

target=7与余下数组右上角元素array[0][2]=8比较,7小于8,故去除array最后一列

target=7与余下数组右上角元素array[0][1]=2比较,7大于2,故去除array最上一行

target=7与余下数组右上角元素array[1][1]=4比较,7大于4,故去除array最上一行 

target=7与余下数组右上角元素array[2][1]=7比较,7等于7,返回true。

 

实现代码:

    public static boolean test (int target, int[][] array) {

        int i = 0;
        int j = array[0].length - 1;

        while (i<array.length && j>=0) {
            if (target == array[i][j]) return true;
            else if (target < array[i][j]) j--;
            else i++;
        }

        return false;
    }

 

 

 

 

复杂度:

O(M+N),M、N分别为数组的行数与列数。

 

posted on 2018-07-05 09:22  Deltadeblog  阅读(120)  评论(0编辑  收藏  举报

导航