面试题3_查找二维数组中的指定整数
//面试题3:二维数组中的整数查找
//在一个二维数组 n*m 中,查找给定的一个整数。
//该二维数组的特点是:二维数组中的每一行从左到右递增,每一列从上到下递增。
//完成一个函数:输入一个二维数组和一个整数,判断能不能找到。
//直观思路:依次每行每列的扫描每个整数,看它是否与给定的整数相等。
//时间复杂度:O(n*m)
//进阶思路:从二维数组的右上角开始扫描判断,每次判断均可以去掉一行或者一列的元素,时间复杂度大大减小。
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
class Solution
{
public:
bool FindKey(int *matrix, int rows, int cloums, int key)
{
if(matrix==nullptr || rows<=0 || cloums<=0)
return false;
bool result=false;
int row=0;
int cloum=cloums-1;
while(row<rows && cloum>=0)
{
if(matrix[row*cloums+cloum] == key)
{
result=true;
vector<int> index;
index.push_back(row);
index.push_back(cloum);
cout<<index[0]<<","<<index[1]<<endl;
return result;
}
else if(matrix[row*cloums+cloum] > key)
--cloum;
else
++row;
}
return result;
}
};
int main(void)
{
int matrix[][4]={1,2,8,9,
2,4,9,8,
4,7,10,13,
6,8,11,15};
int key=16;
//输入的key在数组中,不在数组中,数组是空的。
Solution object;
bool result=object.FindKey((int *)matrix,4,4,key);
cout<<result<<endl;
system("pause");
return 0;
}