我依照固有思路研究之后做出来了,但是提交的时候,最后一个测试例子没有通过,超时了。据我猜测是最后一个测试用例的数组长度过于大,两层 for 循环的效率过于低下,所以超时了。
classSolution:deftwoSum(self, nums, target):""" :type nums: List[int] :type target: int :rtype: List[int] """for index_a, a in enumerate(nums):
for index_b, b in enumerate(nums):
if index_a == index_b:
continueif a + b == target:
return [index_a, index_b]
后来,我上网查了相关资料,发现了一个十分简单并且时间复杂度也低的解法:
classSolution:deftwoSum(self, nums, target):""" :type nums: List[int] :type target: int :rtype: List[int] """
dic = {}
for i, num in enumerate(nums):
if num in dic:
return [dic[num], i]
else:
dic[target - num] = i
这个解法用了哈希表的思想,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
用一个字典的 keys 来记录 [target - num] ,相应的 value 记录此时 num 所对应的 index ,然后最多只用遍历一遍数组 (或列表),就能求出最终结果。这种方法效率很高,代码看着也清晰整洁,比我自己写的不知道高到哪里去了。
本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ...
[详细]