题目:在一个二维数组中,每一行按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请输入一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数.
<p>#include<iostream>
#include<string>
using namespace std;</p><p>//1. 每次取矩阵<span style="background-color: rgb(204, 102, 204);"><strong>右上角</strong></span>的元素与输入元素比较。
bool Find(const int* matrix, int rows,int columns,const int n)
{ //将所有的数据放在一个一维数组里面
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]==n)//每次取得矩阵右上角的那个元素
{
found=true;
break;
}
else if(matrix[row*columns+column]>n)
--column;
else
++row;
}
}
return found;
}</p><p>//2. 每次取矩阵<span style="color:#000000;background-color: rgb(204, 51, 204);"><strong>左下角</strong></span>的元素与输入元素比较。
bool Find(const int* matrix, int rows,int columns,const int n)
{ //将所有的数据放在一个一维数组里面
bool found=false;
if(matrix!=NULL&&rows>0&&columns>0)
{
int row=rows-1;//最后一行
int column=0;//第一列
while(row>=0&&column<columns)
{
if(matrix[row*columns+column]==n)
{
found=true;
break;
}
else if(matrix[row*columns+column]>n)
--row;
else
++column;
}
}
return found;
}</p>
注意:
不可以选择左上角与右下角,无法确定剔除行还是列,无法缩小查找范围。