题目描述
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
思路:
-
暴力
时间复杂度 O(mn) -
利用二维数组由上到下,由左到右递增的规律,那么选取左下角或者右上角的元素a[ i ] [ j ] 与 target进行比较,当target大于元素 a [ i] [j ],那么 target 必定在元素 a 所在行的右边, 即 j++, 当target大于元素a[ i] [j ]时,那么target 必定在元素 a 所在 列的上边,即 i–; 时间复杂度 O (m+n)。
-
每一行都按照从左到右递增的顺序排序,每一行看做递增数组,利用二分法查找,通过遍历每一行查找答案,时间复杂度为 mlog(n)。
**代码: **
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row=array.size();
int col=array[0].size();
int i=0,j=col-1;
while(i<row && j>=0){ //从右上角开始
if(array[i][j]>target){
j--;
continue;
}else if(array[i][j]<target){
i++;
continue;
}else{
return true;
}
}
return false;
}
};