AcWing 15. 二维数组中的查找
原题链接
中等
作者:
牛奶小柒Luke
,
2021-03-31 20:23:15
,
所有人可见
,
阅读 322
暴搜也能做时间复杂度o(n^2)
这里
单调性扫描 o(n + m)
找每个子矩阵的右上角
子矩阵右上角x左边的数都小于x;子矩阵右上角下面的数都大于x
当找到一个值i,如果i > x;则要找的数在i左边,所以列数--
当找到一个值j,如果j < x;则要找的数在i下边,所以行数++
因为行数++,共有n次,列数--,共有m次,所以时间复杂度为n + m
class Solution {
public:
bool searchArray(vector<vector<int>> array, int target) {
if(array.empty() || array[0].empty()) return false;
int i = 0,j = array[0].size() - 1;
while(i < array.size() && j >= 0){
if(array[i][j] == target) return true;
if(array[i][j] < target) i++;
else j--;
}
return false;
}
};