二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:从数组的最后一行,第一列a[i][j] 开始遍历,如果target大于该数,则列往右移 (++j),若target小于该数,则行往上移(--i),直到找到该数,或者到达边界条件退出循环(不含该整数)。
关键:在于这个题目是有序的。所以我们要利用有序这个条件来降低我们的时间复杂度。一看到“有序“,时间复杂度为o(nlogn)的字眼,我们就要想起二分搜索,虽然这个题目不是二分遍历,但是我觉得和二分遍历还是很像的,通过判断这一行的最小值是否比target小,然后往右移,通过判断这一列的最大值是否比target大,然后往上移。
代码:
class Solution { public: bool Find(int target, vector<vector<int> > array) { int lenx = array.size(); int leny = array[0].size(); int i = lenx-1; int j =0; while(array[i][j]!=target&&i>=0&&j<leny) //修改为:while(i>=0&&j<leny&&array[i][j]!=target) { if(array[i][j]<target) j++; if(array[i][j]>target) i--; } if(i<0||j>=leny) return false; else return true; } };
相似题目:

浙公网安备 33010602011771号