力扣75——哈希表/哈希集合
发布人:shili8
发布时间:2025-03-03 22:55
阅读次数:0
**力扣75 —— 哈希表/哈希集合**
### 题目描述给定一个整数数组 `nums` 和一个目标值 `target`,请在该数组中找到和为 `target` 的两个数,并返回它们的下标。
你可以假设每个输入只包含唯一的数字。这个问题的答案必须是下标的列表(下标从1 开始)。
### 示例* 输入:nums = [2,7,11,15], target =9 输出:[0,1]
解释:因为 nums[0] + nums[1] ==9且0 和1 是这两个数字在数组中的下标。
* 输入:nums = [3,2,4], target =6 输出:[1,2]
解释:因为 nums[1] + nums[2] ==6且1 和2 是这两个数字在数组中的下标。
### 思路这个问题可以使用哈希表来解决。我们首先遍历整个数组,将每个数字及其下标存储到哈希表中。然后,我们再次遍历整个数组,检查是否存在一个和为 `target` 的数字对。如果找到这样的对,我们将它们的下标添加到答案列表中。
###代码
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: # 创建一个空哈希表 num_dict = {} # 遍历整个数组,将每个数字及其下标存储到哈希表中 for i, num in enumerate(nums): if num not in num_dict: num_dict[num] = [i] else: num_dict[num].append(i) # 遍历整个数组,检查是否存在一个和为 target 的数字对 for i, num in enumerate(nums): complement = target - num # 如果找到这样的对,我们将它们的下标添加到答案列表中 if complement in num_dict: return [num_dict[num][0], num_dict[complement][0]] # 如果找不到这样的对,则返回空列表 return []
### 注释* 我们首先创建一个空哈希表 `num_dict` 来存储数字及其下标。
* 然后,我们遍历整个数组,将每个数字及其下标存储到哈希表中。如果一个数字已经存在于哈希表中,我们将其下标添加到列表中。
* 接下来,我们再次遍历整个数组,检查是否存在一个和为 `target` 的数字对。如果找到这样的对,我们将它们的下标返回作为答案。
* 如果找不到这样的对,则返回空列表。
### 时间复杂度时间复杂度为 O(n),其中 n 是数组长度。我们首先遍历整个数组,将每个数字及其下标存储到哈希表中,然后再次遍历整个数组,检查是否存在一个和为 `target` 的数字对。
### 空间复杂度空间复杂度为 O(n)。我们创建了一个哈希表来存储数字及其下标,每个数字都可能被存储一次,因此空间复杂度为 O(n)。