剑指Offer第1题:二维数组中的查找

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

此题与leecode 74相同,可以参照leecode的矩阵示例。
解题思路:数组为排序过的数组,左上角的元素最小,右下角的元素最大。我们可以选取一个位于中间值的位置作为搜索的起始点,因此这个位置可以是左下角或者是右上角,本次选取左下角作为搜索起始点。

1
2
3
4
5
6
7
8
9
10
11
12
13
bool Find(int target, vector<vector<int> > array) {
if (array.empty()) return false;
int r = array.size();
int c = array[0].size();
int i = r-1;
int j = 0;
while (i>=0 && j<c) {
if (array[i][j] > target) i -= 1; //从左下角开始搜索,如果此处的值大于目标值,因此需要往上搜索
else if (array[i][j] < target) j += 1; //如果小于目标值,因此需要往右边搜索
else return true; // 如果等于目标值,就返回true
}
return false; //否则返回false
}