杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。

题目要求:
//杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于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
分析:
题目要求数组的每行从左到右是递增的,每列从上到下是递增的,则我们必须初始化一个数组,代码实现如下:

int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

如果我们要在这组数组中找出一个元素,则我们应该设置一个函数,如果,大于要找的这个元素,则向后面退1,如果小于,则向前进1,如果等于,则直接返回,代码实现如下:

while((left >= 0) && (right < col))
	{
		//如果这个数字小于key,则向后移一位;
		if(arr[left][right] < key)
		{
			left++;
		}
		//如果这个数字小于key,则向前移一位;
		if(arr[left][right] > key)
		{
			right--;
		}
		//如果这个数字等于key,则返回1;
		if(arr[left][right] == key)
		{
			return 1;
		}

全部代码如下:

#include <stdio.h>
#include <stdlib.h>

#define ROW 3
#define COL 3
int Findnum(int arr[ROW][COL], int row, int col, int key)
{
	int left = 0;
	int right = col-1;
	while((left >= 0) && (right < col))
	{
		//如果这个数字小于key,则向后移一位;
		if(arr[left][right] < key)
		{
			left++;
		}
		//如果这个数字小于key,则向前移一位;
		if(arr[left][right] > key)
		{
			right--;
		}
		//如果这个数字等于key,则返回1;
		if(arr[left][right] == key)
		{
			return 1;
		}
	}
	//否则返回1;
	return 0;

}
int main()
{
	//定义一个二维数组;
	int arr[ROW][COL] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
	//找出这个数组中9这个数字;
	int key = 9;
	//找到了返回1,找不到返回0;
	int ret = Findnum(arr, ROW, COL, key);
	if (1 == ret)
	{
		printf("找到了!\n");
	}
	if (0 == ret)
	{
		printf("找不到!\n");
	}



	system("pause");
	return 0;
}

展示结果如下:

杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。