簡體   English   中英

為什么 python 列表中的索引比 pop 快?

[英]Why is index faster than pop in python list?

您好,我正在對 leetcode 進行編碼測試,我有一個問題。

“26. Remove Duplicates from Sorted Array”描述如下。

給定一個排序數組 nums,就地刪除重復項,使每個元素只出現一次並返回新長度。 不要為另一個數組分配額外的空間,您必須通過使用 O(1) 額外的 memory 就地修改輸入數組來做到這一點。

解決方案01

# 4.4948496559999995
idx = 0
for _ in range(len(nums)-1):
    if nums[-1-idx] == nums[-2-idx]:
        nums.pop(-1-idx)
    else:
        idx += 1
return len(nums)

解決方案02

# 3.689027874
ans = 1
for i in range(len(nums)-1):
    if nums[i] != nums[i+1]:
        nums[ans] = nums[i+1]
        ans += 1
return ans

檢查時間復雜度

if __name__ == '__main__':
    from timeit import Timer
    t = Timer("for t in [[1, 1, 1, 2], [1, 1, 1, 2, 2, 3], [1, 2, 3, 3, 3, 3], []]: Solution().removeDuplicates(t)", "from __main__ import Solution")
print(t.timeit())

解決方案 01 運行時間為 4.4948496559999995,解決方案 02 運行時間為 3.689027874

pop 和 index 具有 O(1) 時間復雜度,但為什么解決方案 02 比解決方案 01 快?

關於 leetcode,我確信的一件事是運行時間不等於算法的時間復雜度。 有時這取決於您提交的時間以及網站的繁忙程度。 一旦我提交了三次相同的答案,每次都會得到不同的運行時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM