从今天开始每天写一道leetcode(希望能做到吧)
class Solution:
def twoSum(self, nums: list[int], target: int) -> list[int]:
hashtable = dict()
for i, num in enumerate(nums):
if target - num in hashtable:
return [hashtable[target - num], i]
hashtable[num] = i
return []
本题的目标是快速查找,用的方法是哈希表
哈希表的时间复杂度是O(1),空间复杂度是O(N)
参考资料:
Python enumerate() 函数 | 菜鸟教程 (runoob.com)https://www.runoob.com/python/python-func-enumerate.html
参考官方提供的两种代码,本质差别就是
一种是两次冒泡排序,
-
时间复杂度:O(N2),其中 N 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。
-
空间复杂度:O(1)。
另一种用哈希表代替了第二次的冒泡排序,
·时间复杂度:O(N),其中 N 是数组中的元素数量。对于每一个元素 x,我们可以 O(1) 地寻找 target - x。
·空间复杂度:O(N),其中 N 是数组中的元素数量。主要为哈希表的开销。
一边找一边插入哈希表也算是挺巧妙的