【发布时间】:2019-02-02 13:15:29
【问题描述】:
一个我无法回答的面试问题,也无法在网上找到任何相关答案。
我知道 arraylist 根据索引在恒定时间内检索数据。
假设在一个数组列表中,有 10000 个数据并且元素位于第 5000 个位置(我们没有给出位置),我们必须搜索一个特定的值(例如整数 3,它恰好在第 5000 个索引上) ,为了查找值,我们将不得不遍历arraylist来查找值,这需要线性时间对吗??
因为如果我们遍历arraylist来查找数据,它会花费线性时间而不是恒定时间。
简而言之,我想知道 contains 方法的内部工作原理,我必须在其中检查特定值并且我没有索引。它必须遍历数组以检查特定值,并且需要 O(n) 时间,对吧?
提前致谢。
【问题讨论】:
-
基于索引的检索需要固定时间。搜索特定值是线性的(除非数组已排序,在这种情况下,您应用 bin.search 以
O(logn)时间)。有没有可能你误解了这个问题?也许提供了一些额外的细节 -
@mangusta。面试官问我关于arraylist和linkedlist之间区别的问题,我告诉他linkedlist有利于插入和删除,因为它需要恒定的时间,而arraylist需要O(1)进行搜索。我告诉过arraylist 搜索适用于索引,因为它需要恒定的时间。然后他问假设元素在第 5000 个位置,你必须从索引 0 开始搜索,这也需要线性时间。怎么说它需要 O(1) ?