Description:
题目大意:查找二维数组的目标值,二维数组中从左到右依次递增,从上到下依次递增
解题思路:方法一
算法标签:二分查找
逐行二分查找,时间复杂度
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)
代码:
class Solution {
public:
bool search(vector<int>array,int target) {
int left = 0,right = array.size() - 1;
while(left <= right) {
int mid = (left + right) >> 1;
if(array[mid] == target)
return true;
else if(array[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return false;
}
bool Find(int target, vector<vector<int> > array) {
// 逐行遍历
for(auto i : array)
if(search(i,target))
return true;
return false;
}
};
解题思路:方法二
算法标签:线性搜索
利用二维数组排序特性搜索,时间复杂度
O
(
M
+
N
)
O(M + N)
O(M+N)
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.size() == 0)
return false;
// 行
int row = array.size();
// 列
int list = array[0].size();
int left = 0,right = list - 1,down = row - 1;
while(left <= right && down >= 0){
// 从左下角开始
int temp = array[down][left];
if(temp == target)
return true;
// 如果当前值比目标值小,说明这一列都比目标值小
else if(temp < target)
left++;
// 如果当前值比目标值大,说明这一行都比目标值大
else
down--;
}
return false;
}
};