程序员面试金典 10.9

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的元素,这样这个元素将矩阵分成了四部分,然后根据排序的性质,在左下和右上进行搜索。代码我调了很久,也没调通,主要问题在于正方形才有对角线,而矩形的对角线元素很难定义。

发布了194 篇原创文章 · 获赞 2 · 访问量 7703

猜你喜欢

转载自blog.csdn.net/RayoNicks/article/details/105546087
今日推荐