其他分享
首页 > 其他分享> > 【练习题】杨氏矩阵查找

【练习题】杨氏矩阵查找

作者:互联网

杨氏矩阵特点:

矩阵从左到右和从上到下严格统一有序(统一递增或递减)

【思维拓展】:杨氏矩阵相当于二叉排序树,左子树都比根节点小,右子树都比根节点大。

以矩阵统一递增为例,二叉排序树转换成矩阵就是左子树在左边,右子树在下面,根节点就是指针当前所指向的数字。

题目:

写出函数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