面试题3_查找二维数组中的指定整数

来源:互联网 发布:思念诗词 知乎 编辑:程序博客网 时间:2024/06/11 04:11

面试题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;}