题目:
在一个二维数据中,每一行都按照从左到有递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数据和一个整数,判断数据中是否含有该整数。
例如下面的二维数组就是每行,每列都递增排序,如果在这个数组中查找数字7,则返回TRUE,如果查找到数字5,由于数组中不含有该数字,则返回FALSE,
1 2 8 9
2 4 8 12
4 7 10 13
6 8 11 15
分析:
这个题相对简单一些,如果一开始没有思路,那么就自己模拟出两个数来测试一下,于是就能拿上找到规律,比如要寻找的是7,咱们从数组第一个数开始遍历,1<7,那么咱们要怎么走,往下走是在增大,往右走也是在增大。于是我们就想有没有一种可能往两个方向走就会有两种数字的发展方向,想到在坐标系中,第三像素就是咱们需要的方式,于是咱们就可以从数组的右上角开始遍历,往左走在减小,往下走在增大,这样就是我们想要的结果了。
其实这样的情况让我想到了搜索树,节点的左孩子都比该节点小,又孩子都比该节点大。
下面就是代码实现了
#include <iostream>
using namespace std;
bool Find(int *data,int rows,int columns,int num)
{
bool hasFound = false;
if(data != NULL && rows>=0 && columns >= 0)
{
int row = 0 ;
int column = columns;
while(row <= rows && column >= 0)
{
if(data[row*(columns+1)+column] == num)
{
hasFound = true;
break;
}
else if(data[row*(columns+1)+column] > num)
column--;
else
row++;
}
return hasFound;
}
}
int main()
{
int data[16] = {1,2,8,9,
2,4,9,12,
4,7,10,13,
6,8,11,15};
bool hasfind = Find(data,3,3,7);
cout<<hasfind<<endl;
return 0;
}
这里我用了一个一维数据来模拟二维数据