python 列表(list)和字典(dic)速度快慢
阿新 • • 發佈:2021-01-15
技術標籤:LeetCodePython雜七雜八leetcodepython資料結構演算法
以 LeetCode劍指 Offer 03. 陣列中重複的數字為例
找出陣列中重複的數字。
在一個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意一個重複的數字。
示例 1:
輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
使用列表:
class Solution: def findRepeatNumber(self, nums: List[int]) -> int: lis = [] for n in nums: if n in lis: return n lis.append(n)
使用字典
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
dic = set()
for i in nums:
if i in dic:
return i
dic.add(i)
時間對比
上面是字典,下面是列表,可以看到字典明顯要快
原理
在python中,字典的儲存是雜湊表,通過健值直接進行檢索
而列表的讀取靠的是偏移,即對列表每一個元素都進行判斷
該題另一種方法
原地交換
自我理解:本質是無重複的排序,在找到索引0的時候,前幾步的試驗已經將幾個位置排好了,即每次試驗排好一個位置
所以複雜度為On