Problem Description
在一个 n * m
的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
e.g.
现有矩阵 matrix 如下:
1 | [ |
给定
target
= 5,返回true
。给定
target
= 20,返回false
。
note
0 <= n <= 1000
0 <= m <= 1000
Solution
方法有很多,单纯双for循环暴力肯定太low。主要还是双指针、二分法这些。不过有个思路很好,站在该矩阵的右上角来看,这货就是一个「二叉搜索树」。
二叉搜索树的性质:
- 节点的左子树上的所有节点的值都小于等于节点的值;
- 节点的右子树上的所有节点的值都大于等于节点的值;
- 左子树和右子树也都是BST。
那就模拟一颗二叉搜索树来做咯:
1 | public class LcOf04 { |
其中注意下,如果用双指针、二分法最好从右上角为起点。