题目
在一个二维数组中,每一行从左到右递增。每一列从上到下递增。输入一个二维数组和一个整数,判断数组中是否含有这个整数。
思路
每次和数组的右上角的数字比较,若要找的数比右上角的数字大,则排除右上角数字所在的行,若要找的数比右上角的数字小,则排除右上角数字所在的列。如此就可以一步步缩小范围。
代码实现
#include<iostream>
using namespace std;
bool find(int*matrix,int rows,int columns,int number)
{
if(matrix==NULL||rows<=0||columns<=0)//鲁棒性
return false;
bool find=false;
int row=0;
int column=columns-1;
while(row<rows&&column>=0)
{
if(number==matrix[row*columns+column])//注意二维数组的使用
{
find=true;
return find;
}
else if(number<matrix[row*columns+column])
{
column--;
}
else
{
row++;
}
}
return find;
}
int main()
{
int a[]={2,4,9,4,7,10,6,8,11};
int number=3;
bool result=find(a,3,3,number);
cout<<result;
}