Sorted Matrix Search:在行列都排好序的矩阵中查找
根据行列排序的性质,如果target
比当前元素大,那么应该向右下查找,否者应该向左上查找,所以可以从右上角和左下角的元素开始进行查找,如果从别的元素开始,则无法准确判断下一个需要比较的元素。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.size() == 0 || matrix[0].size() == 0) return false;
size_t row = 0, col = matrix[0].size();
while(row < matrix.size() && col > 0){
if(target > matrix[row][col - 1]){
row++;
}
else if(target < matrix[row][col - 1]){
col--;
}
else{
return true;
}
}
return false;
}
};
书上的另一种方法,是在在对角线上进行二分搜索,找到第一个大于等于target
的元素,这样这个元素将矩阵分成了四部分,然后根据排序的性质,在左下和右上进行搜索。代码我调了很久,也没调通,主要问题在于正方形才有对角线,而矩形的对角线元素很难定义。