1. 两数之和问题解析
作为LeetCode题库的第一道题目,"两数之和"看似简单却蕴含着算法设计的核心思想。这道题要求我们在一个整数数组中找到两个数,使它们的和等于给定的目标值,并返回这两个数的索引。
1.1 问题描述与示例
给定一个整数数组nums和一个整数target,我们需要找出数组中两个不同的元素,使得它们的和等于target。返回这两个元素的索引(顺序不限),且保证每个输入只有唯一解。
示例分析:
-
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:nums[0] + nums[1] = 2 + 7 = 9 -
输入:nums = [3,2,4], target = 6
输出:[1,2]
解释:nums[1] + nums[2] = 2 + 4 = 6
1.2 问题约束条件
- 不能重复使用同一个元素两次(即不能使用同一个索引两次)
- 假设每个输入只有唯一解
- 可以按任意顺序返回答案
- 数组长度在合理范围内(通常为2到10^4)
- 元素值和目标值在32位整数范围内
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 暴力解法分析
2.1 双重循环实现
最直观的解法是使用双重循环遍历所有可能的元素组合:
java复制public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
return new int[0];
}
2.2 时间复杂度分析
暴力解法的时间复杂度为O(n²),其中n是数组长度。对于每个元素,我们都要遍历数组中剩余的所有元素来寻找匹配项。
空间复杂度为O(1),因为没有使用额外的存储空间。
注意:虽然暴力解法简单直接,但在处理大规模数据时效率低下,不推荐在实际应用中使用。
3. 哈希表优化解法
3.1 哈希表原理
哈希表(Hash Table)是一种通过哈希函数将键映射到值的数据结构,可以实现平均O(1)时间复杂度的查找操作。
在本题中,我们可以利用哈希表存储已经遍历过的元素及其索引,这样在后续遍历时,可以快速检查是否存在与当前元素配对的元素。
3.2 优化算法实现
java复制public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> hashTable = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (hashTable.containsKey(complement)) {
return new int[]{hashTable.get(co
