题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
思路1:由于每一行都是递增的,可每一行都采用二分查找。
解题思想:二分法
时间复杂度:(n行m列)O(nlogm)
思路2:利用从左到右递增,从上到下递增,可选择右上角为起点开始查找,若偏小,则往下查找,若偏大,则往左查找;
或者选择左下角为起点开始查找,若偏小,则往右查找,若偏大,则往上查找。
解题思想:二分法(相当于一竖行加上一横行为递增排序)
时间复杂度:O(m + n)
C++代码
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if (array.size() <= 0)
return false;
int i = 0;
int j = array[0].size() - 1;
while (i < array.size() && j >= 0)
{
if (array[i][j] > target)
{
j--;
}
else if (array[i][j] < target)
{
i++;
}
else
{
return true;
}
}
return false;
}
};