【Leetcode 1.两数之和】(Python3完整代码)

📅 发布时间:2026/7/16 18:47:23 👁️ 浏览次数:
【Leetcode 1.两数之和】(Python3完整代码)
一、题目描述给定一个整数数组nums和一个整数目标值target请你在该数组中找出和为目标值的那两个整数并返回它们的数组下标。你可以假设每种输入只会对应一个答案并且你不能使用同一个元素两次。你可以按任意顺序返回答案。示例1输入nums [2,7,11,15], target 9输出[0,1]解释因为 nums [0] nums [1] 2 7 9所以返回 [0, 1]。示例2输入nums [3,2,4], target 6输出[1,2]示例3输入nums [3,3], target 6输出[0,1]二、解答解法一暴力枚举1. 思路分析暴力枚举的核心逻辑是双层循环遍历数组外层循环遍历每个元素作为第一个候选数内层循环遍历当前元素之后的所有元素作为第二个候选数检查两个数的和是否等于目标值若满足则直接返回下标。2.完整代码class Solution: def twoSum(self, nums: List[int], target: int) - List[int]: n len(nums) # 外层循环遍历每个元素作为第一个数 for i in range(n - 1): # 内层循环遍历当前元素之后的所有元素作为第二个数避免重复检查 for j in range(i 1, n): if nums[i] nums[j] target: return [i, j] # 题目保证有解此处仅为语法完整性 return []3. 复杂度分析时间复杂度O()n 是数组长度双层循环最多执行次。空间复杂度O(1)仅使用了常数级别的额外空间。4. 优缺点优点逻辑简单、容易理解无需额外数据结构适合算法新手入门。缺点时间效率低当数组长度较大时如 n 会出现明显的性能瓶颈。解法二哈希表1. 思路分析暴力解的核心问题是重复查找 “补数”即target - 当前数哈希表字典可以将 “查找补数” 的操作从 O(n) 优化到 O(1)遍历数组时用哈希表存储 “已遍历元素的值下标”对当前元素计算需要的补数target - value若补数存在于哈希表中说明之前遍历过该数直接返回两者下标若不存在将当前元素的值和下标存入哈希表继续遍历。2.完整代码class Solution: def twoSum(self, nums: List[int], target: int) - List[int]: # 哈希表存储已遍历元素的「值: 下标」 mapping {} # 遍历数组同时获取下标和值 for index, value in enumerate(nums): # 计算当前元素需要的补数 complement target - value # 检查补数是否在哈希表中即是否已遍历过 if complement in mapping: # 若存在返回补数的下标和当前下标 return [mapping[complement], index] # 若不存在将当前元素存入哈希表先查后存避免使用同一个元素 mapping[value] index # 题目保证有解此处仅为语法完整性 return []3. 复杂度分析时间复杂度O(n)仅需遍历数组一次每次哈希表的查找 / 插入操作都是 O(1)。空间复杂度O(n)最坏情况下需要存储数组中所有元素除了最后一个。4. 优缺点优点时间效率最优是 LeetCode 官方推荐的最优解法。缺点需要额外的哈希表空间逻辑比暴力解稍复杂但理解后极易掌握。