题目:两数求和(来源:力扣网)
要求:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和,为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
已经给出的代码
class Solution:
def twoSum1(nums: List[int], target: int) -> List[int]:
1.解决本题目的关键
通过查找target - nums[i]的值是不是出现在nums列表里面即可
2.解法一(只通过列表list解决):
# 不通过字典,只用list
def twoSum2(nums: List[int], target: int) -> List[int]:
list = []
for w in range(0,len(nums)):
w1 = target - nums[w]
#通过nums[:w]可以避免本身和排除已经搜索过的所有元素,降低了复杂度,搜索时间是O(n)
if w1 in nums[:w]:
return [w,nums.index(w1)]
break
return None
不好的地方:list插入很快,但是搜索很慢
解法2(借助字典解决):
def twoSum1(nums: List[int], target: int) -> List[int]:
list = []
map = dict()
a = len(nums)
for w in range(0, a):
w1 = target - nums[w]
if w1 in map:# 字典中搜索key是否有target-nums[w]存在,效率极快
return [map[w1], w]
# 插入字典操作放在在条件判断后面,避免值重复导致搜索到的value位置错误
map[nums[w]] = w
return None
解决了方法list搜索慢的缺点,速度提高了很多
ps:也是网上总结下来的,实在太菜了~