27

问答题 27 /104

给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增

1 2 3

3 5 6

4 8 9

现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。 描述算法并且给出时间复杂度(不考虑载入矩阵的消耗)

参考答案

算法思想: 沿着对角线查找,获得i,使得k位于a[i][i]与a[i+1][i+1]之间。 k只可能存在于a[i][i]对应的右上角矩阵 和a[i+1][i+1]对应的左下角矩阵。 使用递归法继续查找即可。 时间复杂度 O(n)

int searchK(int int_arr[][],int n,int startlow,int startclm,int k)
{
        int lefttemp=0;
        int downtemp=0;
        int i=0;
        while(int_arr[startlow+i][startclm+i]
                i++;
        if (i==n)
                return 0;
        else if(arr[i][i]==k)
                reuturn 1;
        else
        return searchK(int_arr,n,startlow,startclm+i,k)+searchK(int_arr,n,startlow+i,startclm,k);
}