题目描述
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二维数组实际上就是杨氏矩阵
思路:
这是一个非常常见的问题,总结下来一共三种方式:
- tips:m为行n为列
1.(暴力求解)两层循环嵌套开始逐个逐行遍历,时间复杂度O(m*n)
2.进化版.把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案,时间复杂度
3.拿二维数组右上角的数做参考值与当前数字进行对比,大之上移,小之右移,时间复杂度O(m+n)
(拿右上角数做参考值同理);(m为行n为列),只有在m行数比列数小很多时二分查找法才优于该方法
- 二维数组的行越从左向右递增,列从上到下递增,为了寻找一个数可以从二维数组的左下角开始(or右上角),若目标值大于(小于)这个数,则右移(左移);若目标值小于(大于)这个数,则上移(下移),找到了返回True,若遍历结束还未找到该目标整数则返回False;
代码:
方法1.暴力求解
bool Find(int target, vector<vector<int> > array) {
int row = array.size();
int col = array[0].size();
if(row == 0 || col == 0) return false;
for(int i = row-1; i >= 0; i--){
if(array[i][col-1] < target) return false;
for(int j = 0; j < col; j++){
if(array[i][j] > target) break;
if(array[i][j] == target) return true;
}
}
return false;
}
Python 暴力求解