C 语言实现杨氏矩阵找数字(详解)

杨氏矩阵

一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 杨氏矩阵
  • 实现杨氏矩阵找数字
    • 原理(实现方法)
  • 代码实现
  • 结果

实现杨氏矩阵找数字

原理(实现方法)

123
456
789

找对角线的位置比如这个3这个位置比较特殊和7,
先拿3说,3这个位置仔细观察
3是所在这个一行里最大的,而在一列里是最小的
7是一行里最小的,是一列中最大的

有了这些条件就好排查数字了
例如找一个2,3比2大说明3(3是这一列里(3,6,9)最小的)这一列都没有这个元素
直接缩小范围到
1,2
3,4
5,6
列减一直接找到了2
/再如找一个8,3比8小,说明3(3是一行(1,2,3)里最大的)
这一行里没有要找的元素
范围到
456
789

代码实现

int FindNum(int arr[3][3], int k, int* row, int* col)
{
	int x = 0;
	int y = *col - 1;
	while (x <= *row - 1 && y >= 0)
	{
		if (arr[x][y] > k) {
			y--;//确定右上角的元素位置,,--的是一列
		}
		else if (arr[x][y] < k) {
			x++;//++的一行
		}
		else {
			*row = x;//修改main理的x,y
			*col = y;
			return 1;
		}
		
	}
//找不到
		return 0;
}

结果

在这里插入图片描述

你可能感兴趣的:(c++,c语言,算法,编程语言,c++,算法)