题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
开始思路:
只是做出来,但是没有考虑只对应一个答案,两个for循环不容易解决重复问题,
1 a = [2,4,6,3]
2 b = 9
3 def twoSum(nums, target):
4 lens = len(nums)
5 for i in range(lens):
6 for j in range(i+1,lens):
7 if nums[i]+nums[j] == target:
8 print(i, j)
9 break
10 break
这样在列表的第一个第二个值重复时候会出错
1 a = [2,4,6,3]
2 b = 9
3 def twoSum(nums, target):
4 lens = len(nums)
5 for i in range(1, len(nums)):
6 temp = nums[:i]
7 if (target - nums[i]) in temp:
8 j = temp.index(target - nums[i])
9 print(j, i)
10
11
12 twoSum(a, b)
range 的范围是从0到i-1
列表的下标范围是从0开始对应元素
a[:1]表示a[0],列表的第一个元素
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
enumerate(sequence, [start=0])
1 def two_sum(nums, target):
2 """这样写更直观,遍历列表同时查字典"""
3 dct = {}
4 for i, n in enumerate(nums):
5 #nums自动识别为字典,nums中下标为键,值为列表对应值
6 cp = target - n
7 #寻找和减去第一个的数的差值
8 if cp in dct:
9 print([dct[cp], i])
10 else:
11 dct[n] = i
12 #返回的一种写法
13
14
15 two_sum(a, b)
1 用字典模拟哈希求解
2 字典记录num1和num2的值和位置
3 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
4 def twoSum(nums, target):
5 hashmap={}
6 #存储的内容是键值对(key-value)映射
7 for ind,num in enumerate(nums):
8 hashmap[num] = ind
9 for i,num in enumerate(nums):
10 j = hashmap.get(target - num)
11 if j is not None and i!=j:
12 return [i,j]