描述
在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]
给定 target = 7,返回 true。
给定 target = 3,返回 false。
数据范围:矩阵的长宽满足 0≤�,�≤5000≤n,m≤500 , 矩阵中的值满足 0≤���≤1090≤val≤109
进阶:空间复杂度 �(1)O(1) ,时间复杂度 �(�+�)O(n+m)
示例1
输入:
7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:
true
说明:
存在7,返回true
示例2
输入:
1,[[2]]
返回值:
false
示例3
输入:
3,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:
false
说明:
不存在3,返回false
思路:
直接二分查找target即可,如果找到了target返回true,否则调整范围然后继续寻找,未找到的话返回false;第二种解法比较简单,直接暴力遍历寻找,效率比较低不是特别推荐。
题解:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row = array.size(), col = array[0].size();
int i = 0, j = col - 1;
while (i < row && j >= 0) {
if (array[i][j] == target) {
return true;
}
if (array[i][j] < target)
++i;
else
--j;
}
return false;
}
};
解法2:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
//暴搜,不推荐
for (auto i : array) {
for (auto j : i) {
if (j == target)
return true;
}
}
return false;
}
};
文章描述了一个在二维有序数组中通过二分查找或暴力遍历方法寻找特定整数的问题,给出了两种解法,一种是高效的二分查找,另一种是效率较低的遍历法。解法包括了对数组的边界条件处理和递增顺序的利用。
953

被折叠的 条评论
为什么被折叠?



