在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]
给定 target = 7,返回 true。
给定 target = 3,返回 false。
数据范围:矩阵的长宽满足 0 \le n,m \le 5000≤n,m≤500 , 矩阵中的值满足 0 \le val \le 10^90≤val≤109
进阶:空间复杂度 O(1) ,时间复杂度 O(n+m)
思路:进阶的算法复杂度要求是 O(n+m),那么肯定就是从横纵来看都只进行了一次遍历;利用有序二维数组的性质,从数组的左下角开始遍历起,遇到大的就向右移,小的就向上移。
- class Solution {
- public:
- bool Find(int target, vector
int > > array) { - //线性搜索,利用数组的性质,从数组的左下角开始搜索
- if(array.empty()||array[0].empty()) return false;
- if(target
0][0]) return false; - int row=array.size()-1,col=array[0].size()-1;
- int x=row,y=0;
- while(x>=0&&y<=col)
- {
- if(array[x][y]>target) x--;
- else if(array[x][y]
- else return true;
- }
- return false;
- }
- };