两数之和
方式一:哈希表,用最少的时间和空间复杂度
基础知识:enumuerate:返回一个带有下标和数值的字典,字典的使用dict[index]=index所代表的值。 还有另外一种字典的创建方式: hashtable = dict(),或者 dct = {} 解题思路:首先赋值一个空字典,查看字典中有无target-n的值,如果没有,将n所在的赋值给空字典。 (这里又有一个关键思路:题目要求返回的是所在的index,但是字典只能提取出值,使用dct[n] = i。) (因为字典是空的,所以第一次相当于赋值的作用,赋值之后查找元素在不在字典中)
def two_sum ( nums, target) :
"""这样写更直观,遍历列表同时查字典"""
dct = { }
for i, n in enumerate ( nums) :
cp = target - n
if cp in dct:
return [ dct[ cp] , i]
else :
dct[ n] = i
test = two_sum( [ 1 , 3 , 4 , 5 , 6 ] , 5 )
print ( test)
方式二:暴力枚举
1.基础知识: 1.类当中一定会有实例变量(相当于只要使用了类一定要进行属性的初始化) 2.在方法的调用中,首先创建一个实例变量调用初始化函数,之后通过实例变量调用类方法 2.思路:一个一个查找
class Solution :
def __init__ ( self, nums, target) :
self. nums = nums
self. target = target
def twoSum ( self) :
n = len ( self. nums)
for i in range ( n) :
for j in range ( i + 1 , n) :
if self. nums[ i] + self. nums[ j] == self. target:
return [ i, j]
return [ ]
solution = Solution( [ 1 , 3 , 4 , 5 , 6 ] , 5 )
print ( solution. twoSum( ) )