在杨氏矩阵中查找一个数字是否存在
作者:互联网
核心
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
1 2 3
4 5 6
7 8 9
具体实现
int searchnum(int arr[3][3], int num,int* x,int* y){
while (num <= arr[2][2]){//当 num 小于数组最大值时 进入循环
int i = 0;
if(num == arr[2][2]){//num与数组最大值相等的时候,返回 1
*x = 2;
*y = 2;
return 1;
}
for (i = 0; i < 3; i++){//num 比数组最大值小 进入与每一行的比较
if (num <= arr[i][2]){//当 num 小于每一行的最大值时,进入该行的循环,先与第一行比较
int j = 0;
if (num == arr[i][2]){//当num 与每一行的最大值相等时,返回 1
*x = i;
*y = 2;
return 1;
}
for (j = 0; j < 3; j++){//num 与 第 i 行的数字进行比较
if (num == arr[i][j]){//找到,返回 1
*x = i;
*y = j;
return 1;
}
return 0;//进入该行比较,未命中,返回 0;
}
}
}
}
return 0;//num 比最大值大,直接返回0;
}
int main () {
int arr[3][3] = {
1, 2, 3,
4, 6, 10,
8, 10, 15
};
int num = 10;
int x = 0;
int y = 0;
int ret = searchnum(arr, num, &x, &y);
printf("%d x : %d y : %d\n", ret, x, y);
return 0;
}
标签:数字,int,递增,矩阵,查找,num,杨氏,数组 来源: https://blog.csdn.net/qq_44905386/article/details/99685705