1. 程式人生 > 其它 >python 列表(list)和字典(dic)速度快慢

python 列表(list)和字典(dic)速度快慢

技術標籤: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中,字典的儲存是雜湊表,通過健值直接進行檢索

而列表的讀取靠的是偏移,即對列表每一個元素都進行判斷

該題另一種方法

原地交換

https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/solution/mian-shi-ti-03-shu-zu-zhong-zhong-fu-de-shu-zi-yua/

自我理解:本質是無重複的排序,在找到索引0的時候,前幾步的試驗已經將幾個位置排好了,即每次試驗排好一個位置

所以複雜度為On