【练习题】杨氏矩阵查找
作者:互联网
杨氏矩阵特点:
矩阵从左到右和从上到下严格统一有序(统一递增或递减)
【思维拓展】:杨氏矩阵相当于二叉排序树,左子树都比根节点小,右子树都比根节点大。
以矩阵统一递增为例,二叉排序树转换成矩阵就是左子树在左边,右子树在下面,根节点就是指针当前所指向的数字。
题目:
写出函数find_target
,判断一个数字target
是否在一个n * m
的二维矩阵中
矩阵性质如下:
- 矩阵的每一行都是从左向右升序排列
- 矩阵每行的第一个数字要比上一行的而最后一个数字大
如果这个数字在矩阵中,返回1
,否则返回0
int find_target(int ** matrix, int n, int m, int target) {
}
思路1:两次二分,第一次确定在第几行,第二次确定第几列
思路2:杨氏矩阵查找求解
从右上角开始(因为右上角的值符合左边比他小,下面比她大的原则)。
若target<
右上角值,指针向左移(因为左边的数比当前值小),j--
若target >
右上角值,指针向下移(因为下面的数都比当前值大),i++
int find_target(int ** matrix, int n, int m, int target) {
//n行m列
int i = 0, j = m - 1;
//若在合法范围内,进行循环
while ((i > -1 && i < n) && (j > -1 && j < m)) {
if (target == matrix[i][j]) return 1;
else if (target < matrix[i][j]) --j;
else ++i;
}
return 0;
}
标签:练习题,target,int,矩阵,右上角,查找,杨氏,matrix 来源: https://blog.csdn.net/tarawin/article/details/88821638