题目
题目描述
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,
输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
。
示例
现有矩阵 matrix 如下:
[ |
给定 target =
5
,返回true
。
给定 target =20
,返回false
。
题解
暴力解法
按行依次搜索
target,如果当前元素大于target,则进行下一行搜索;若当前元素等于target,则return True;未找到return False。
时间复杂度:O(nm),最好情况O(1)
空间复杂度:O(1)
class Solution: |
二分查找
按行依次搜索target,
每次从中间元素进行匹配
,如果该行未找到,则进入下一行搜索;若找到则return True;未找到return False。
时间复杂度:O(nlogm)
空间复杂度:O(1)
class Solution: |
二叉搜索树
从右上角开始搜索,将矩阵转化为二叉搜索树
,如上图所示。右上角元素作为根节点,如果target小于当前节点,则向左下方搜索,即向左边列搜索;如果target大于当前节点,则向右下方搜索,即向下一行搜索;否则为找到target,return True。若行索引或列索引越界,即矩阵中无target值,return False。每轮迭代相当于将矩阵删除一行(列)
,得到新矩阵进行迭代。
时间复杂度:O(n+m)
空间复杂度:O(1)
class Solution: |