[剑指Offer]二维数组中的查找[java]
来源:互联网 发布:货运平台软件下载 编辑:程序博客网 时间:2024/05/23 15:07
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入描述
array: 待查找的二维数组
target:查找的数字
输出描述
查找到返回true,查找不到返回false
思路一
- 查找的方法一般就是顺序查找、二分查找、哈希表查找、二叉排序树查找。
- 根据该二维数组的特征,即行、列有序,我们可以首先想到使用二分查找,但这里是二维数组,至少要遍历一遍数组的长度,对每一行或者每一列进行二分查找,此时的时间复杂度将近是O(nlogn),我们可以继续优化。
- 二分查找的过程中,会产生一棵二叉判定树,二叉判定树的特点就是,左子树小于根节点,右子树大于根节点。利用这个性质,我们可以将二维数组模拟成一个二叉判定树,此时就需要找出根节点,使得左子树小于根节点,右子树大于根节点,并且它的孩子节点也符合这种特性。根据给定条件,可以看到有两个点符合要求,即左下角和右上角。
- 以左下角来说,往上数值递减,相当于左子树,往右递增,相当于右子树。所以,我们可以定义左右两个指针,初始时指向左下角节点作为根节点,当我们需要查找的数字比当前数组节点大的时候,右指针往右移一位,当需要查找的数字小于当前节点时,左指针往上移一位。代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
思路二
如前面所说的,最先能想到的二分查找法,我们稍作一点点优化,即将二维数组以对角线划分为上三角很下三角数组,再分别对上三角和下三角进行二分查找。如下图:
代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
个人理解,应该是要比直接全部遍历二分查找好一点点…
0 0
- 剑指offer--二维数组中的查找 java
- 剑指offer:二维数组中的查找(java)
- [剑指Offer]二维数组中的查找[java]
- 剑指offer算法 java实现 二维数组中的查找
- 剑指offer题目3-二维数组中的查找(JAVA实现)
- JAVA实现二维数组中的查找(《剑指offer》)
- 【剑指offer-Java版】03二维数组中的查找
- 剑指offer题解【二维数组中的查找】-java
- 剑指Offer 3题 二维数组中的查找 Java
- 剑指offer-----二维数组中的查找(java版)
- Java算法-剑指offer-二维数组中的查找
- 剑指offer算法 java实现 二维数组中的查找
- 剑指offer算法 java实现 二维数组中的查找
- JAVA实现二维数组中的查找(《剑指offer》)
- 《剑指offer》牛客网java题解-二维数组中的查找
- 剑指offer——二维数组中的查找(JAVA)
- 剑指offer-->二维数组中的查找
- 剑指offer之二维数组中的查找
- 使用nmon检测JVM运行情况
- mantis bug 管理平台 关于筛选一点记录
- Java安全加密
- 使用iframe,父页面和子页面jquery冲突
- TCP和UDP的最完整的区别
- [剑指Offer]二维数组中的查找[java]
- 复杂链表的复制。。。链表的复制
- centos 7 kafka 2.10-0.10.2.0 集群
- VS2008编译boost正则表达式库Regex过程中的注意事项
- [IMWeb训练营作业]select组件 20170424
- 关于自定义0开机动画bootanimation
- iOS开发之真机调试相关文件创建全过程(最新)
- 用自己的数据,制作python版本的cifar10数据集
- JSP声明