到了2012年,才发现自己iteye的账号里躺着几个可怜的邮件。原来是些算法题,真帅。
看了下,感觉很简单嘛。就想把题目的答案写封邮件过去,抬头一看,还有时效的。
算了,虽然已错过了时间,不过还是可以把自己的思路记录一下。以供以后咨询。
题目1:
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。
(alt+p)
(alt+i)
解答。
其实这个题目不算很难。 关键是如何寻找。
最笨的方法是,扫一遍所有的数据就好了。
可是题目已经告诉我们这个是有序的。
那个根据这个有序性,我们是不是可以做些什么事情来进行优化呢?
第一个想法是这样的:
先扫描第一行,如果遇到第一个大于目标值的数字停下(假定,这时没有搜索到目标值),那么可以记录下当前的index, 然后在搜索第二行的时候,就不需要到这个位置,最多到index-1就好了。
然后递归就好了。
这个最差情况下,还是要扫描一般的数据, 实际上复杂度并没有降低多少。
在第一个想法的基础上,
进行如下改进:
1) 第一行的搜索,使用二分查找。
2)第二行的搜索,并不用从头开始,而是从第一行第一个大于目标值的数字的左下角的数字开始向前搜索。
如果等于目标值就停止。
如果大于目标值,就向前搜索,直到找到一个小于目标值的数字。
如果小于目标值,直接转入到下一行数字。
这样做的好处是,
1, 充分利用了 右边的数字比左边大的好处。
2. 充分利用了 下面的数字比上面的大。
可以尽可能的减少搜索方向和次数。
伪码如下:
index = 0 // pointer
// locate first row.
for element in row:
if element < targetValue :
index++
if element == targetValue:
return True
// other rows
for rows in arrays:
rowsId=1
while True:
row = rows[rowsId]
// locate last number less than targetValue
if row[index] > targetValue:
index--;
if row[index] == targetValue:
return True
if row[index] < targetValue:
rowsId++
if index < 0:
return False
// Finished
分享到:
相关推荐
【标题】"博文视点专业书目2006年第一期"揭示了该压缩包内容的核心,即2006年度第一期的博文视点专业书籍目录。博文视点是一家知名的IT出版机构,以其深度的技术图书和教育资料在业界享有盛誉。这期目录可能包含了...
点击博文视点 HTTP协议 测试,http协议测试,不要下载,谢谢 点击博文视点 HTTP协议 测试,http协议测试,不要下载,谢谢 点击博文视点 HTTP协议 测试,http协议测试,不要下载,谢谢 点击博文视点 HTTP协议 测试,...
博文视点 虚拟化技术-原理与实现 pdf版本。高清晰度。
\SQL\PHEI Broadview 2006专业书目 第一期\s-博文视点全品种图书目录.pdf
《ASP.NET从入门到精通源码》是博文视点推出的一本图书的配套代码资源,主要针对想要深入理解和掌握ASP.NET技术的读者。这个完整的图书管理系统不仅是一个学习工具,也是一个实际开发中的参考实例,它采用三层架构...
在描述中提到的“博文链接:https://peijunlin2008.iteye.com/blog/318050”,虽然没有提供具体的细节,但可以推测这个链接指向的博客文章可能包含了这两个算法题目的详细解析。访问这个链接,读者可以期待找到关于...
《结构之法算法之道blog所有博文集锦》是针对编程爱好者和求职者的一份宝贵资源,它集结了作者July在2016年1月前关于数据结构与算法的全部博客文章。这份压缩包文件包含了两个主要部分:《算法之道 博文集锦.chm》和...
本次CSDN和博文视点名家讲坛活动中,技术专家夏昕和林信良共同探讨了Spring的相关知识。 【新手学习Spring的时机】夏昕建议,拥有大约一年的Java Web应用开发经验后,开发者可以开始学习Spring。这是因为一年的实际...
python 双向最大匹配算法 双向最大匹配算法 双向最大匹配算法
1、资源配合博文《【python代码实现】决策树分类算法》、《【python代码实现】朴素贝叶斯分类算法》、《【python代码实现】人工神经网络分类算法及其实战案例(股票价格波动分析)》实操可掌握: 2、决策树分类算法...
关于程序员面试的一些经典算法 博文集锦 过来人经验
结构之法算法之道博文集锦第四期CHM文件。July、2011.10.06。
18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的博文链接,希望能够帮助大家学。 目前追加了其他的一些经典的DM算法,在others的包中涉及...
KNN算法及基于该算法的回归和分类实践 博文对应的数据和代码
《结构之法算法之道》是一本深受IT从业者和学习者喜爱的博客文集,它深入浅出地探讨了计算机科学中的核心概念——数据结构与算法。第6期的博文集锦,以CHM(Compiled HTML Help)文件的形式呈现,这是一种微软开发的...
该资源详细解读可关注博主免费专栏《论文与完整程序》206号博文 鹦鹉优化算法(Parrot Optimization Algorithm,POA)是一种新兴的智能优化算法,旨在模拟鹦鹉的行为特征来解决复杂的优化问题。该算法于2024年提出,...
算法、数据结构、面试挺好的文档。 结构之法算法之道blog所有博文集锦by_July_截止到2014.12.9.chm