题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
- 先比较整数target与二维数组每行的第一个的大小,若是大于array[i][0],再比较target与这行中最后一个数的大小,若是小于最后一个值,则从右往左遍历,比较数组的值与target的大小,若是存在array[i][j]=target,返回True,如是出现target>array[i][j]时,退出这行的循环,继续下行。
2.若是把每一行都遍历完了,array[i][1] > target > array[i][0]就返回False
代码:
class Solution
{
public:
bool Find(int target, vector<vector<int>> array) {
if (array.empty())
{
return false;
}
int _length = array.size();//行数
for (int i = 0; i < _length; i++)
{
if (array[i].empty())
{
continue;
}
else if (target >= array[i][0])
{
if(target <= array[i][array[i].size() - 1])
{
for (int j = array[i].size() - 1; i >= 0; j--)
{
if (target == array[i][j])
{
return true;
}
else if (target > array[i][j])
{
break;
}
}
}
else
{
continue;
}
}
else
{
return false;
}
}
return false;
}
};
//测试
int main()
{
int target = 10;
vector<vector<int>> array = { {1,2 ,3},{ 4, 5,8 } };
Solution so;
bool a =so.Find(target, array);
cout << "array " << array.size() <<" " <<a << endl;
system("pause");
return 0;
}