[英]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.