两数之和
题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
代码实现
暴力求解
def twoSum(nums: (List[int]), target: int) -> List[int]:
n = len(nums)
for i in range(n):
for j in range(i + 1, n):
if nums[i] + nums[j] == target:
return [i, j]
return [-1, -1]#表示没找到解
哈希表解法(字典)
def twoSum_better(nums: List[int], target: int) -> List[int]:
nums_dict = {}
for i, value in enumerate(nums):
if (target - nums[i]) in nums_dict.keys():
return [nums_dict[target - nums[i]], i]
nums_dict[value] = i
return [-1, -1]
上述两种方式中,暴力求解法花费时间较长,但可以节约空间,而哈希表求解虽然会使求解时间变短,但会加大空间复杂度。有得必有失!