首页 > 代码库 > C++算法之 二维数组的查找

C++算法之 二维数组的查找

题目:在一个二维数组当中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组

和一个整数,判断数组当中是否含有该整数。

 

思路:

1   2   8     9

2   4   9    12

4   7   10  13

6   8   11  15

每一行递增,如果右上角的数字小于要找的数字,那么这一行所有的数字都小于要找的数字;

每一列递增,如果右上角的数字大于要找的数字,那么这一列所有的数字都大于要找的数字;

bool Find(int* sz, int rows, int columns, int key){	bool found = false;	if (sz == NULL || rows <= 0 || columns <= 0)	{		return found;	}	if (sz!=NULL && rows> 0 && columns>0)	{		int row = 0;		int column = columns - 1;		while (row < rows && column > 0)		{			if (sz[row*columns + column] == key)			{				found = true;				break;			}			else if (sz[row*columns + column] > key) //如果右上角的数字大于要找的数字,那么删除此列			{				column--;			}			else//如果右上角的数字小于小于要找的数字,删除此行;			{				row++;			}		}	}}


完整测试代码:

// FindNumInSZ.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;bool FindNumOnMatrix(int* matrix, int rows, int columns,int number){	bool found = false;	if (matrix != NULL && rows > 0 && columns >0)	{		int row = 0;		int column = columns - 1;		while (row < rows && column > 0)		{			if (matrix[row*columns + column]  == number)			{				found = true;				break;			}			else if (matrix[row*columns + column] > number)			{				--column;			}			else			{				++row;			}					}		return found;	}}bool Find(int* sz, int rows, int columns, int key){	bool found = false;	if (sz == NULL || rows <= 0 || columns <= 0)	{		return found;	}	if (sz!=NULL && rows> 0 && columns>0)	{		int row = 0;		int column = columns - 1;		while (row < rows && column > 0)		{			if (sz[row*columns + column] == key)			{				found = true;				break;			}			else if (sz[row*columns + column] > key) //如果右上角的数字大于要找的数字,那么删除此列			{				column--;			}			else//如果右上角的数字小于小于要找的数字,删除此行;			{				row++;			}		}	}}int _tmain(int argc, _TCHAR* argv[]){	int sz[] = {1,2,8,9,				2,4,9,12,				4,7,10,13,				6,8,11,15				};	bool b = FindNumOnMatrix(sz,4,4,2);	cout<<b<<endl;	bool c = Find(sz,4,4,2);	cout<<c<<endl;	getchar();	return 0;}


二维数组可以尝试左上角,右上角,左下角,右下角等特殊的地方开始进行思考!

 

 

 

 

 

 

 

 

 

C++算法之 二维数组的查找