目录
题目描述
难度:简单
- 给定一个整数数组
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的长度。因为只需要遍历数组一次,每次查找哈希表的操作时间复杂度近似为。
空间复杂度:,因为在最坏情况下,哈希表需要存储数组中的所有元素。

被折叠的 条评论
为什么被折叠?



