//杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
解题思路:
1> 首定根据矩阵定义一个数组,并初始化为上述所示;
2> 为了满足时间复杂度小于O(N)所以只能有一个循环,所以通过遍历数组与
你输入的值比较就行不通了,因此我们采用while循环,根据杨氏矩阵的
性质: 数组的每行 从左到右是递增的,列从上到下是递增的,我们从最
后一行向上遍历,即可查找整个数组中的值,同时与你想要找的值相比较,
相等返回1,不等返回0;
3> 注意采用scanf需要#define _CRT_SECURE_NO_WARNINGS。
源代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
杨氏矩阵
//有一个二维数组.
//数组的每行从左到右是递增的,每列从上到下是递增的.
//在这样的数组中查找一个数字是否存在。
//时间复杂度小于O(N);
//数组:
//1 2 3
//2 3 4
//3 4 5
int Find(int arr[][3], int row, int col)
{
int import = 0;
int row1 = row - 1;
int col1 = 0;
printf("请输入要查找的值:");
scanf("%d", &import);
while (row1 < row && col1 < col)
{
if (arr[row1][col1] == import)
{
return 1;
break;
}
else
{
if (arr[row1][col1] > import)
{
row1--;
}
else
{
col1++;
}
}
}
return 0;
}
int main()
{
int arr[][3] = { { 1, 2, 3 }, { 2, 3, 4 }, { 3, 4, 5 } };
printf("%d", Find(arr, 3, 3));
system("pause");
return 0;
}
运行结果:
加油自己!!