其他分享
首页 > 其他分享> > 在杨氏矩阵中查找一个数字是否存在

在杨氏矩阵中查找一个数字是否存在

作者:互联网

核心

有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于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