您的位置:首页 > 职场人生

面试题之二维数组中的查找

2016-04-13 20:50 381 查看
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。

例如:

1 2 8 9

2 4 9 12

4 7 10 13

6 8 11 15

如果查找数字7,则返回true,如果查找数字5,则返回false.

对于这道题主要考察二维数组的存储,二维数组在内存中是一维存储,从上到下存储各行元素,在同一行中按照左向右的顺序存储。因此可以根据行号和列号计算出数组首地址的偏移量,从而可以找到对应的元素。

该题的大致思路就是从最后一列向前进行比较,找到比key小的之后从行的上面向下遍历。。。

下面给出具体的代码:

#include<iostream>
#include<stdlib.h>

using namespace std;
#define N 4

bool Iskey_exist(int *a,int rows,int cols,int key)
{
bool found = false;
if(a != NULL && rows > 0 && cols > 0){
int row = 0;
int col = cols - 1;
while(row < rows && col >= 0){
if(a[row * cols + col] == key){
found = true;
break;
}else if(a[row * cols + col] > key){
--col;
}else{
++row;
}
}
}
return found;
}
int main(int argc,char**argv)
{
int a

;
int key;

cout << "please input elements:"<<endl;
for(int i = 0;i < N; ++i){
for(int j = 0;j < N ;++j){
cin >> a[i][j];
}
}
while(1){
cout << "please input key:(-1 == quit) "<<endl;
cin >> key;
if(key == -1){
cout << "error!!" << endl;
exit(1);
}
if(Iskey_exist((int *)a,N,N,key)){
cout << key << " is found!!"<< endl;
}else{
cout << key << " is not found !!"<<endl;
}
}
return 0;
}


其执行结果:

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