剑指offer题目1:二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解答思路
首先是把符合这种题目思路的数组画在纸上。

这时候会发现两个规律:
- 每个数都会比左上方大,比右下方要小。
- 最左下角的数会比同一列的要大,也比同一行的数要小。

于是乎,我们可以把输入进来的整数和左下角的数x比较,如果比x小,那么我们可以和比x小的上1个数,如果比x大,可以和x右边的数比较,直到两个数相等。时间复杂度是O(m+n)。
实现代码
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int heigh = array.size();
int length = array[0].size();
int i = heigh-1;
int j = 0;
bool ret = false;
while(i >= 0 && j < length) {
if(array[i][j] > target) {
i--;
} else if(array[i][j] < target) {
j++;
} else {
ret = true;
break;
}
}
return ret;
}
};
作者:大傻逼
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号