题意:给定一个元素按序排列的矩阵,判断某个元素是否在其中。
思路:两次二分搜索,先搜索列,再搜索行。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.size() == 0) return false;
if(target < matrix[0][0]) return false;
if(target == matrix[0][0]) return true;
int low = 0;
int high = matrix.size() - 1;
if(matrix[low][0] == target || matrix[high][0] == target) return true;
while(high - low > 1) {
if(matrix[low][0] == target || matrix[high][0] == target) return true;
int mid = low + (high -low) / 2;
if(matrix[mid][0] == target ) return true;
if(target < matrix[mid][0]) {
high = mid;
}
else {
low = mid;
}
}
int r = low;
if(matrix[high][0] < target) r = high;
low = 0;
high = matrix[r].size() - 1;
while(low != high) {
if(matrix[r][low] == target || matrix[r][high] == target) return true;
int mid = low + (high - low) / 2;
if(matrix[r][mid] == target) return true;
if(matrix[r][mid] < target) {
low = mid + 1;
}
else {
high = mid;
}
}
if(matrix[r][low] == target) return true;
return false;
}
};另一种思路是把他当作一维二分查找做。
n * m matrix convert to an array => matrix[x][y] => a[x * m + y]
an array convert to n * m matrix => a[x] =>matrix[x / m][x % m];

本文介绍了一种高效的矩阵搜索算法,用于在一维有序数组或二维有序矩阵中查找特定元素。该算法利用了二分搜索原理,提供了两种实现思路:一种是分别在行和列上进行二分搜索;另一种则是将矩阵转化为一维数组进行二分搜索。
271

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



