给定如下的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);
}