行递增、列递增的二维数组中查找
原创
©著作权归作者所有:来自51CTO博客作者legend05070911的原创作品,请联系作者获取转载授权,否则将追究法律责任
每一行递增,每一列递增的矩阵的查找:
一个m*n的矩阵,从左到右从上到下都是递增的,给一个数elem,求是否在矩阵中,给出思路和代码
杨氏矩阵,简单题目:
#include
#include
/**
* 有序矩阵查找
*
* T = O(n + m)
*
*/
void findKey(int **matrix, int n, int m, int key)
{
int row, col;
for (row = 0, col = m - 1; row < n && col >= 0;) {
/*
对于某一行而言,从后往前找;
整体初始位置为,第一行的最后一列;
即初始是左上角,然后不断和要查找的值进行比较,看是往下,还是往左移动;
*/
if (matrix[row][col] == key) {
printf("第%d行,第%d列\n", row + 1, col + 1);
break;
} else if (matrix[row][col] > key) {
col -= 1;
} else {
row += 1;
}
}
printf("不存在!\n");
}
int main(void)
{
int i, j, key, n, m, **matrix;
// 构造矩阵
scanf("%d %d", &n, &m);
matrix = (int **)malloc(sizeof(int *) * n);
for (i = 0; i < n; i ++)
matrix[i] = (int *)malloc(sizeof(int) * m);
for (i = 0; i < n; i ++) {
for (j = 0; j < m; j ++)
scanf("%d", &matrix[i][j]);
}
// 查询数据
while (scanf("%d", &key) != EOF) {
findKey(matrix, n, m, key);
}
return 0;
}