博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据挖掘算法面试题
阅读量:6361 次
发布时间:2019-06-23

本文共 1067 字,大约阅读时间需要 3 分钟。

昨天去某厂面试数据挖掘,遇到了这么一道题

一个二维矩阵,右边的数值比左边的大,下边的数值比上边的大,设计一种算法,快速查找某个指定数字的位置

如下表所示的数据:

  查找值: 117              
  ——>右边的比左边的大
下边的比上边大 0 8 15 19 24 29 36 43 47 50
18 22 27 32 41 47 51 54 64 71
35 39 49 59 66 75 80 82 86 93
48 56 66 70 79 83 95 101 106 113
73 83 88 94 100 106 115 123 130 136
84 91 99 109 117 127 130 134 143 146
105 111 114 120 128 134 143 152 155 158
125 129 136 139 147 152 160 168 171 178
139 148 154 160 168 175 182 187 197 202
154 163 171 181 184 194 203 210 218 223

 

在现场比较紧张,而且也不够时间,没有想出好的解决方法,今天上班时间折磨了一会,发现了这么一个好方法

时间复杂度估计就O(max(n,m))这样子吧,没有具体证明

基本的原理就是二分查找+对角限制

假设矩阵是n*m的

首先用二分查找找到最右列上比待查找值大的最小值,在上表中的话就是136

然后在最左列查找比待查找值小的最大值,在上表中的话就是105

这样就把待查找范围限制在下表范围内

73 83 88 94 100 106 115 123 130 136
84 91 99 109 117 127 130 134 143 146
105 111 114 120 128 134 143 152 155 158

 接下来翻转比较,用二分查找找到最下面一行中比待查找值大的最小值,即120

然后在最上面一行查找比117小的最大值,即115

这样就把待查找范围限制在下表范围内

94 100 106 115
109 117 127 130
120 128 134 143

接下来继续翻转比较,找到左右俩边满足条件的最大值与最小值,即109和130

这样就把待查找范围限制在下表范围内

109 117 127 130

接下来一步二分查找即可匹配到117了,至此查找完毕......

某厂的面试官,给点机会吧亲。。。

 

 

 

 

 

转载于:https://www.cnblogs.com/juefan/p/3436317.html

你可能感兴趣的文章
C++(vs)多线程调试 (转)
查看>>
iOS程序员对算法的要求
查看>>
Nginx目录保护、防盗链、限速及多域名处理
查看>>
asp.net 使用JS获得串口数据
查看>>
android样式跟主题
查看>>
Charles打开无法访问网络
查看>>
2018.08.13
查看>>
WebSphere--基本特性
查看>>
PHP Jquery
查看>>
商品加入购物车表结构设计
查看>>
hibernate hibernate.cfg.xml
查看>>
Windows下Python3.6安装第三方模块
查看>>
v9定时发布的简单实现方法[支持静态生成]
查看>>
span中内容随着数字长度的添加而增大
查看>>
Collection接口框架图
查看>>
Basic Concepts of Block Media Recovery
查看>>
字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人...
查看>>
linux中安装JDK linux中安装Tomcat linux中安装Mysql 及故障解析 linux系统安装redis
查看>>
LeetCode-最后一个单词的长度
查看>>
iOS UI 07 uitableview
查看>>