LeetCode74. 搜索二维矩阵

题目大意:要求在一个二维矩阵中搜索一个数,要求是时间尽可能少。说明:二维矩阵是从左到右,从上到下依次增大的。

题目分析:本题如果用挨个遍历的话,显然没有利用上矩阵中的有序关系。我的做法是:将target的值与每行的最后一个数进行比较,若最后一个数小于target,那么还要往下搜索,将搜索的行边界的上界x设为下一行的下标;反之,将行边界的下界y设为当前行,并退出循环。

最后,若x改变了,表示target大于第一行所有的值,但是此时y=0,表示y还没改动过,也就是target的值大于最后一行的最后一个值,也就是矩阵中没有这个元素。其他情况下,循环结束后的x和y的值都是相等的。

代码展示:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size();
        if(m==0)
            return false;
        int n = matrix[0].size();
        if(n==0)
            return false;
        int x = 0;
        int y = 0;
        for(int i=0;i<m;i++){
            if(matrix[i][n-1]<target)
                x = i+1;
            else if(matrix[i][n-1]>target){
                y = i;
                break;
            }
            else
                return true;
        }
        if(x!=0 && y==0)
            return false;
        for(int i=0;i<n;i++){
            if(matrix[x][i]==target)
                return true;
        }
        return false;
    }
};

猜你喜欢

转载自blog.csdn.net/jaster_wisdom/article/details/81005867
今日推荐