方法:线性搜索
通过观察二维数组可以发现,左下角的元素是所在列最大的值,是所在行最小的值;右上角的元素是所在列最小的值,是所在行最大的值。如果从左下角或者右上角进行搜索,则一次搜索可以排除一行或者一列的元素。下列以右上角进行搜索:
时间复杂度:0(n+m)
空间复杂度:o(1)
class Solution {
public:
bool Find(int target, vector<vector<int> >& array) {
int col = array.size();
int row = array[0].size();
//特殊情况处理
if (col == 0 || row == 0)
return false;
int n = 0;
int m = row - 1;
while (n < col && m >= 0) {
//从右上角开始搜索
if (array[n][m] == target)
return true;
//小于右上角元素的,排除所在列的元素
else if (target < array[n][m])
m--;
//大于右上角元素的,排除所在行的元素
else
n++;
}
return false;
}
};

京公网安备 11010502036488号