牛客网剑指Offer系列——二维数组中的查找
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目解析
这一题一开始我直接用C#进行遍历搜索,严格来说这也不能算是一种解题方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution
{
public bool Find(int[][] array, int target)
{
foreach(int[] a in array)
{
foreach(int b in a)
{
if(b==target)
{
return true;
}
}
}
return false;
}
}
实际上,题目给出的二维数组每一行从左到右递增,每一列从上到下递增。我们可以从左下角开始比较,若左下角的数小于target,则往右遍历;若左下角的数大于target,则往上遍历。这样可以最快地找出target。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
bool Find(vector<vector<int> > array,int target) {
int height=array.size();
int width=array[0].size();
for(int i=height-1,j=0;i>=0&&j<width;){
if(target>array[i][j])
j++;
else if(target<array[i][j])
i--;
else return true;
}
return false;
}
};