您的位置:首页 > 其它

一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。要求效率尽可能的高

2017-08-02 09:03 429 查看
我们可以这样入手,比如给一个3*3的二维数组,从每一行的最大值开始比较:

1.如果X大于a[0][2],第一行中的数据肯定都比x小,所以继续跟下一行的a[1][2]比较

2.如果X小于a[0][2],第3列中的数据肯定都比x大,所以继续跟上一列的

a[0][1]比较

3.循环条件为行数>=0;列数<=n-1;

实现代码如下:

#define M 3
#define N 3
bool Find(int a[M]
,const int x,int n)
{
int col = n-1;
int row = 0;
if (x > a[n-1][n- 1] || x < a[0][0])
return false;
while (col<=n-1&&row>=0)
{
if (x < a[row][col])
col--;
else if (x>a[row][col])
row++;
else
return true;
}
return false;
}

int main()
{
int a[M]
= { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << Find(a, 1, 3) << endl;
cout << Find(a, 9, 3) << endl;
cout << Find(a, 4, 3) << endl;
cout << Find(a, 11, 3) << endl;
system("pause");
return 0;
}


结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐