算法思想记录:给定一个整数数组 nums 和一个目标值 target

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版权协议,转载请附上原文出处链接和本声明。