#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool Find(const vector < vector <int> > vec, int rc, int number)
{
bool found = false;
if (vec.size()>0&rc>0)
{
int row = 0;
int column = rc - 1;
while (row < rc && column>= 0 )
{
if (vec[row][column] == number)
{
found = true;
break;
}
else if(vec[row][column]>number)
{
column--;
}
else
{
row++;
}
}
}
return found;
}
int main(int argc,char *argv[])
{
vector < vector <int> > vec;
string str;
//一次只能读一行,可以用while读多行,但是如果用while一直读会造成一直要求输入,而不能读入N*N数组
getline(cin, str);
//统计有多少个数字,因为输入是按空格隔开的,比如1 2 3
int N = 1;
for (int i = 0; i < str.size(); i++)
{
if (str[i] == ' ')
{
N++;
}
}
vector<int> mid;
for (int i = 0; i<str.size(); i++)
{
string str2 = "";
//输入的数字之间以空格隔开
while (str[i] != ' '&&i<str.size()) {
str2 += str[i];
i++;
}
//将字符串转化为整数
int num = stoi(str2);
mid.push_back(num);
}
//将第一个一维数组加入到二维数组第一行
vec.push_back(mid);
for (int i = 1; i < N; i++)
{
vector<int> tmp;
for (int j = 0; j<N; j++)
{
int val;
//cin是遇到空白/空格即认为是此次读取结束,getline是读完一行才认为是读取结束,但是getline只能把读入的内容保存为一个字符串
cin >> val;
tmp.push_back(val);
}
vec.push_back(tmp);
}
//for (int i = 0; i < N; i++)
//{
// for (int j = 0; j < N; j++)
// {
// cout << vec[i][j] << " ";
// }
// cout << endl;
//}
//这里假设要在3*3的数组中寻找值为16数
if (Find(vec, 3, 16))
{
cout << "find!" << endl;
}
else
{
cout << "not find!" << endl;
}
}
剑指offer面试题4:二维数组中的查找
最新推荐文章于 2024-02-26 14:16:13 发布