2016-08-30 44 views
10

我在解決this LeetCode problem時遇到了一個問題。雖然我的解決方案已被系統接受,但在線搜索下列問題後,我仍然沒有任何想法: What is the time complexity of dict.keys() operation?它是否返回密鑰視圖或實際列表(存儲在內存中)密鑰?Python中dict.keys()的時間複雜度是多少?

+2

在Python 3.x中,它的複雜性是'0(1)'。在Python 2.x中,它返回一個列表,以便填充它或在其上執行一些查找需要'0(n)'。 – ozgur

+0

你問關於Python2還是Python3? –

+0

@ozgur - True,但是對於{} .keys()中的_:pass'在任一版本中都是'O(n)'。 –

回答

5

在Python 2中,它是O(n),它構建了一個新列表。在Python 3中,它是O(1),但它不返回一個列表。要從字典的keys中繪製隨機元素,您需要將其轉換爲列表。

這聽起來像你可能使用random.choice(d.keys())爲該問題的第3部分。如果是這樣,那就是O(n),你錯了。您需要實現自己的哈希表或者維護單獨的元素列表,而不會犧牲平均情況下的O(1)插入和刪除操作。

+0

我用'返回self.elements.keys()[randint(0,len(self.elements) - 1)]'它被接受了('self.elements是一個dict對象')。 – Jason

+0

@Jason:是的,那不是O(1)。 – user2357112

+0

正如你所說的「在Python 3中,它是O(1)」。如果'self.elements.keys()'是'O(1)',那麼整個表達式將在'O(1)'中運行。如果我犯了錯誤,請糾正我:) – Jason

相關問題