如何查找排序矩阵中是否存在数字?

时间:2014-12-31 20:19:39

标签: algorithm matrix

整数nxn整数矩阵的行和列的元素按非递减顺序排序。验证数组中是否存在数字的最佳方法是什么?例如,如果给定的矩阵是5x5。

 1  2  3  4  5
 6  7  8  9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

2 个答案:

答案 0 :(得分:0)

首先通过对第1列执行二进制搜索来找到该数字必须处于的行。如果找不到完全匹配,请找到最接近但小于所需数字的数字。所需的数字必须在该行中。

然后,在该行上执行二进制搜索。要么你找到了号码,要么你没有。

答案 1 :(得分:0)

蛮力O(n ^ 2)应该不是问题。

O(log(row_count * col_count)解决方案是

public bool func_name(int[][] input, int target) {

    int row_num = input.length;
    int col_num = input[0].length;

    int b = 0, e = row_num * col_num - 1;

    while(b <= e){
        int m = (b + e) / 2;
        int mid_value = input[m/col_num][m%col_num];

        if( mid_value == target){
            return true;

        }else if(mid_value < target){

            b = m+1;
        }else{
            e = m-1;
        }
    }

    return false;
}

您可以使用O(row_count + col_count)解决方案。步骤将是。

intitalize row = 0 and coloumn as col_count-1

1.if input[row][coloumn]<target, increment row value.
2.If the value is greater decrement the coloumn value.