力扣 240. 搜索二维矩阵 II 二分

  • Post author:
  • Post category:其他



https://leetcode-cn.com/problems/search-a-2d-matrix-ii/


在这里插入图片描述

思路:做法太多了,最简单的暴力,复杂度



O

(

n

m

)

O(nm)






O


(


n


m


)





,或者依次考虑每行/每列,然后二分判断,复杂度



O

(

n

l

g

m

)

O(nlgm)






O


(


n


l


g


m


)





或者



O

(

m

l

g

n

)

O(mlgn)






O


(


m


l


g


n


)





。这里就说一下最巧妙的



O

(

n

+

m

)

O(n+m)






O


(


n




+








m


)





的做法,考虑以矩形右上角为起始点,那么我们可以比较



m

a

t

r

i

x

x

,

y

matrix_{x,y}






m


a


t


r


i



x











x


,


y


























t

a

r

g

e

t

target






t


a


r


g


e


t





的大小关系:

  • 前者大于后者,由于每一列从上至下是单调增的,因此这一列可以排除掉,令



    y

    1

    y-1






    y













    1





    即可。

  • 前者小于后者,由于每一行从左至右是单调增的,因此这一行可以排除掉,令



    x

    +

    1

    x+1






    x




    +








    1





    即可。

  • 前者等于后者,直接返回True。

当x、y越界时,说明没有找到解,那么返回False即可。

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



版权声明:本文为xiji333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。