LeeCode 两数之和

1. 题目介绍

题目名称:两数之和(Two Sum)

题目描述:给定一个整数数组nums和一个目标值target,在数组中找出和为目标值的那两个整数,并返回它们的数组下标。假设每个输入只对应一个答案,且同样的元素不能被重复利用。

2. 解题思路

本题可以使用哈希表的方式进行求解。遍历数组中的每一个元素,判断target值与当前元素的差是否在哈希表中,如果在则返回两个元素的下标;如果不在,则将当前元素添加到哈希表中,继续遍历。

3. 代码实现

3.1 Python代码

def twoSum(nums, target):

hashMap = {}

for i in range(len(nums)):

complement = target - nums[i]

if complement in hashMap:

return [hashMap[complement], i]

hashMap[nums[i]] = i

return []

4. 复杂度分析

时间复杂度:O(n),其中n为数组的长度。遍历一次数组即可找到答案。

空间复杂度:O(n),其中n为数组的长度。哈希表中需要存储n个元素的值和下标。

5. 示例与测试

5.1 示例一

输入:nums = [2, 7, 11, 15], target = 9

输出:[0, 1]

说明:因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]

5.2 示例二

输入:nums = [3, 2, 4], target = 6

输出:[1, 2]

说明:因为 nums[1] + nums[2] = 2 + 4 = 6,所以返回 [1, 2]

5.3 示例三

输入:nums = [3, 3], target = 6

输出:[0, 1]

说明:因为 nums[0] + nums[1] = 3 + 3 = 6,所以返回 [0, 1]

根据以上示例可以看出,对于给定的数组和目标值,在数组中找到和为目标值的两个数,并返回它们的数组下标。如果存在多个满足条件的答案,则返回其中任意一个均可。

鉴于题目给出了一个整数数组,我们可以使用哈希表的方式进行求解。哈希表的主要思想是通过将数组中的元素作为键值对的键,将数组下标作为对应值,来存储数据。这样,在遍历数组的过程中,每次判断target与当前元素的差是否在哈希表中,如果在,则找到了两个元素,返回它们的数组下标,如果不在,则将当前元素添加到哈希表中,继续遍历。

根据以上思路,我们使用了一个哈希表来存储数组中的元素和对应的下标。遍历数组的过程中,我们每次计算target与当前元素的差(complement),然后判断这个差是否在哈希表中。如果在哈希表中,则说明找到了两个元素,直接返回它们的数组下标;如果不在哈希表中,则将当前元素添加到哈希表中,继续遍历下一个元素。

通过上述步骤,我们可以在O(n)的时间复杂度内找到满足条件的结果。同时,由于哈希表查找的时间复杂度为O(1),所以算法的整体时间复杂度为O(n)。在空间复杂度方面,由于需要存储n个元素和对应的下标,所以空间复杂度为O(n)。

对于给定的示例,我们根据上述算法实现并进行测试,可以得到相应的正确结果。这证明了算法的正确性。

后端开发标签