题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
我主要考虑了两种解法,分别是暴力遍历和分排进行二分查找,时间复杂度分别为O(n^2)和O(nlogn).
由于暴力太过简单就不说了,直接遍历数组比较就行了。
二分代码如下:
class Solution {
public:
bool binSearch(const int &target, vector<vector<int> > &array,int low , int high, int &row)
{
if(low <= high)
{
int mid = (low + high) / 2;
if(array[row][mid] == target)return true;
else if(array[row][mid] < target)
return binSearch(target, array, mid + 1, high, row);
else return binSearch(target, array, low, mid - 1, row);
}
return false;
}
bool Find(int target, vector<vector<int> > array) {
for(auto i = 0; i < array.size(); i++)
if(binSearch(target, array, 0, array[0].size() - 1, i))return true;
return false;
}
};