杨氏矩阵:一个矩阵从左到右时递增的,从上到下是递增的。在这样的矩阵中查找一个元素。
方法1:遍历矩阵中的所有的元素。时间复杂度为O(N)。
方法2:从最左侧开始遍历:
int FIND_NUMBER(int arr[3][3],int key)
{
int i = 0,j = 2;//使数据从对角线的左上开始比较。
while(i<3 && j>=0)
{
if(key>arr[i][j])//如果key大于arr[i][j],则向下移动。
{
i=i+1;
}
else
{
if(key<arr[i][j])如果小于则向左移动。
{
j=j-1;
}
else
{
return arr[i][j];
break;
}
}
}
return -1;
}
方法3:与方法2类似,都是从对角线上开始比较。
int FIND_NUMBER(int arr[3][3],int key)
{
int i = 0,j = 0;从右上对角线开始
for(i=0;i<3;i++)
{
if(arr[i][i]==key)
{
return arr[i][i];
}
if(key<arr[i][i])如果不小于,则进入for循环。
{
if(arr[i][i-1]==key)
{
return arr[i][i-1];
}
else
{
if(arr[i-1][i]==key)
return arr[i-1][i];
}
}
}
return -1;
}