题目描述:
杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
思路:
在杨氏矩阵中查找一个数,根据杨氏矩阵的特点(数组的每行从左到右是递增的,每列从上到下是递增的),所以在查找的时候(为保证时间复杂度小于O(N))i 的初始值为 0; j 的初始值为 col - 1;在i和j满足i<row&&j >= 0的情况下,对数组进行查找;若当前数字大于data那么,j–;若当前数字小于data那么,i–;直到找到为止,若找到,则输出该数所在行列(在这里,以用户的角度看,行列都从1开始),若没找到,则输出没找到
查找部分的函数:
int Search(int a[N][N], int row, int col, int data)//查找一个数字是否存在,时间复杂度小于o(n)
{
int i = 0;
int j = col - 1;
while (i<row&&j >= 0){
if (a[i][j] == data){
printf("找到了,第%d行,第%d列\n\n",i+1,j+1);
printf("原数组是 > ");
for (i