两数之和(Python)
目录
题目描述
解题方法
解法一:暴力枚举
思路
复杂度
解法二:哈希表
思路
复杂度
题目描述
难度:简单
nums
和一个目标值target
,要求在数组nums
中找出两个数,使它们的和等于目标值target
。并返回这两个数在数组中的索引。nums = [2, 7, 11, 15]
,target = 9
,因为nums[0] + nums[1] = 2 + 7 = 9
,所以应该返回[0, 1]
。解题方法
解法一:暴力枚举
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
思路
使用两层嵌套循环遍历数组中的每一对元素,计算它们的和,并与目标值target
进行比较。如果找到一对元素的和等于target
,则返回它们的索引。
复杂度
n
是数组nums
的长度。因为对于数组中的每个元素,都需要遍历它后面的所有元素来检查是否满足条件。解法二:哈希表
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashtable:
return [hashtable[complement], i]
hashtable[num] = i
return []
思路
遍历数组nums
,对于每个元素num
,计算另一个数complement = target - num
。然后检查complement
是否已经在哈希表中。如果在,说明已经找到了两个数的和等于target
,可以直接返回它们的索引;如果不在,则将当前元素num
及其索引i
存入哈希表中,继续遍历下一个元素。
复杂度
时间复杂度:,其中
n
是数组nums
的长度。因为只需要遍历数组一次,每次查找哈希表的操作时间复杂度近似为。
空间复杂度:,因为在最坏情况下,哈希表需要存储数组中的所有元素。
作者:QRSN