在其中一次采访中,我问其中一位采访者如何实现网络浏览器的历史记录,但不显示重复数据,需要从最近到第5次访问的网站以相反的顺序显示。
我告诉我们可以使用链表。当用户进入网站时,将根据节点列表检查它,如果该网站已经存在于列表中,我们将从列表中删除它并将其添加为头部。如果它不在列表中,它将被简单地添加为列表的头部。但是他告诉复杂性的顺序是O(n * n)并且他告诉我是否有任何其他数据结构或数据组合我们可以用来使复杂度的顺序为O(n)。我当时没有得到任何线索。如果您有任何想法,请任何人告诉我。
答案 0 :(得分:1)
嗯...
使用链接列表,将URL添加到列表的开头(O(1)
),继续浏览列表,删除(如果找到)O(n)
)
答案 1 :(得分:1)
如果您使用链接列表以及带有指向列表项的指针的哈希表,则可以在常量时间内执行此操作。
答案 2 :(得分:1)
正如其他人所说,使用列表和无序地图将是您最好的选择。访问新页面时,如果用户从未访问过该页面,请将其添加到最后。如果他们已经访问过,请使用哈希映射调用迭代器并将其删除。最后一步是将url添加到列表的开头,并在地图中为它添加一个全新的迭代器。
[1,2,{3 => :a, 7 => :b},4]