1. Two Sum

题目链接:two-num
 思路一:两层for循环暴力求解,结果超时
1 def twoSum(nums,target):#使用二维数组
2     for i in range(len(nums)):
3         for j in np.arange(i+1,len(nums)):
4             if(nums[i] + nums[j] == target):
5                 return [i,j]

思路二:考虑一层for循环,其他的靠python的内置函数解决。问题关键是求解target - num是否在list里面,在的话找到位置,要注意num1和num2是同一个元素的例外情况。

def twoSum(nums,target):
    j = -1
    for i in range(len(nums)):
        if (target - nums[i]) in nums:
            if(nums.count(target - nums[i]) == 1) & (target - nums[i] == nums[i]):
                continue
            else:
                j = nums.index(target - nums[i],i+1)
                break
    if j > 0:
        return [i,j]
    else:
        return []

思路三:解题思路是在方法一的基础上,优化解法。想着,num2 的查找并不需要每次从 nums 查找一遍,只需要从 num1 位置之前或之后查找即可。但为了方便 index 这里选择从 num1 位置之前查找

1 def twoSum2(nums,target):
2     j = -1
3     for i in range(1,len(nums)):
4         temp = nums[:i]
5         if (target - nums[i]) in temp:
6             j = nums.index(target - nums[i])
7             break
8     if j >= 0:
9         return [j,i]

思路四:通过哈希来求解,这里通过字典来模拟哈希查询的过程。

个人理解这种办法相较于方法一其实就是字典记录了 num1 和 num2 的值和位置,而省了再查找 num2 索引的步骤。
1 def twoSum3(nums,target):
2     hashmap = {}
3     for ind,num in enumerate(nums):
4         hashmap[num] = ind
5     for i,num in enumerate(nums):
6         j = hashmap.get(target - num)
7         if j is not None and j != i:
8             return [i,j]

思路五:类似方法三,不需要 mun2 不需要在整个 dict 中去查找。可以在 num1 之前的 dict 中查找,因此就只需要一次循环可解决。

1 def twoSum4(nums,target):
2     hashmap = {}
3     for ind,num  in enumerate(nums):
4         if hashmap.get(target - num) is not None:
5             return [hashmap.get(target - num),ind]
6         hashmap[num] = ind

参考题解

一些python函数总结

python的count函数

 python的index函数

 &和&&的区别

Python 中 (&,|)和(and,or)之间的区别

 

Python enumerate() 函数

 

 python的map函数

 python的字典的使用

 

 
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/henuliulei/p/13208645.html