杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于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
思路:时间复杂度小于O(n),二分查找思想
int Find_num(int arr[3][3], int rows, int cols, int key)
{
if(arr[0][0]>key && arr[2][2]<key)
{
return 0;
}
int row = 0;
int col = cols-1;
while ((row < rows) && (col >= 0)) //右上角
{
if (key < arr[row][col])
{
col--;
}
if (key > arr[row][col])
{
row++;
}
if (key == arr[row][col])
{
return 1;
}
}
return 0;
}
int find_num(int arr[3][3], int row, int col, int key)
{
if(arr[0][0]>key && arr[2][2]<key)
{
return 0;
}
int x = 0;
int y = col-1;
while(x<row && y>=0) //右上角
{
if(key == arr[x][y])
{
return 1;
}
else if(key > arr[x][y])
{
x++;
}
else
{
y--;
}
}
return 0;
}