题目描述
在一个二维数组中,每一行都按照从左往右递增,每一列都按照从上往下递增。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
按照该二维数组的特性,我们可以从第一行的最后一个元素开始查找,当该元素小于目标元素时,我们就可以直接忽略这一整行的其他元素进入下一行,当该元素大于目标元素时,我们可以直接忽略这一列,向左递减一列。然后重复这个过程,直到找完这整个数组,或者找到元素后退出。
实现代码
#include<iostream>
#include<vector>
using namespace std;
bool Find(vector<vector<int>> arr, int row, int col, int number)
{
if (arr.size()==0 || row <= 0 || col <= 0)return false;
int i = 0;
int j = col - 1;
while (i < row && j >= 0)
{
if (arr[i][j] == number)
return true;
else if (arr[i][j] < number)
i++;
else
j--;
}
return false;
}
int main()
{
int row, col;
cin >> row >> col;
vector<vector<int>> myVec;
for (int i = 0; i < row; i++)
{
vector<int> tmpVec;
for (int j = 0; j < col; j++)
{
int tmp;
cin >> tmp;
tmpVec.push_back(tmp);
}
myVec.push_back(tmpVec);
}
int number;
cin >> number;
cout << Find(myVec, row, col, number)<<endl;
return 0;
}