1.我的目的
记录此题的思路 ----- 灵活运用hashmap/dict提升效率
2.题目描述
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
eg. nums = [2, 7, 11, 15], target = 9 返回 [0, 1]
3.解答
解法一:
def a(nums: List[int], target: int) -> List[int]:
for indexi,i in enumerate(nums[:len(nums)-1]):
for indexj,j in enumerate(nums[indexi+1:]):
if i + j == target:
return [indexi, indexi + indexj + 1]
两个for循环,显然时间复杂度是不过关的,在网上学习他人的解法
解法二:
def a(nums, target):
hashmap = {}
for ind, num in enumerate(nums):
hashmap[num] = ind
for i, num in enumerate(nums):
j = hashmap.get(target - num)
if j is not None and i != j:
return [i, j]
代码很容易看懂,为什么这样效率就能提升很多呢?
我的理解是python 的 dict是使用哈希表实现的,哈希表在数据的存储和查询上几乎可以看做常数时间,就相当于在我们利用hashmap.get的时候不用考虑时间复杂度,这样上面的方法就相当于一个for循环解决了,效率就得到了极大的提升。
(其实一开始我看到网上思路是利用hashmap,第一想法是将序列号放key , 值放value,那么这样就是先获取所有value,遍历找到合适的value,然后又去找value对应key值,其实还是for + for;巧妙的将值作为key是关键的思想)
版权声明:本文为shwwns原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。