【发布时间】:2013-10-17 12:15:05
【问题描述】:
如何在按行排序的 2D n x n 矩阵中搜索元素。
可以在O(nlogn) 中通过对每一行使用二分搜索和O(nlog(logn)) 通过对每一行使用插值搜索来完成。
有O(n) 解决方案吗?
约束:数组包含整数。
示例:在给定的 5x5 矩阵中搜索 32。
0 5 6 8 42 98
-4 -1 3 21 455
-4 0 3 4 4
0 0 0 0 0
0 [32] 64 244 333
请帮忙。
【问题讨论】:
-
行已排序,但列未排序。所以 O(n) 是不可能的。
-
那么,最好是 O(nlog(logn))?
-
您的示例没有任何额外价值。另外,第二行没有排序。
-
不一定总是会有一个额外的值,可以有 >=0 个元素的实例被找到。第二行已修复。
-
O(n)当然是可能的。扫描数组中的每个元素是O(n)操作的典型示例。相反的断言是基于n代表数组一维大小的误解;对于复杂性分析,它肯定不会,它代表数组中元素的数量。如果您对此表示怀疑,并认为扫描数组中的每个元素是O(n^2),那么只需将数组重新整形为一个向量(O(1),因为它只是在处理索引)并扫描向量......神奇地转动一个@987654330 @操作成O(n)一个。普肖。