1. 两数之和
1. 两数之和
要求时间复杂度小于O(n2),可以使用哈希表实现。
思路
- 我们在遍历数组时,每访问一个元素
nums[i],就查看之前是否已经存在一个数target - nums[i]。 - 如果存在,说明找到了两个数,它们的和为
target,直接返回这两个下标。 - 使用
HashMap<Integer, Integer>存储每个数字的值和它的下标,便于快速查找。
复杂度分析
- 时间复杂度:O(n)
只需遍历数组一次,哈希表的插入和查找操作均为 O(1) - 空间复杂度:O(n)
最坏情况下需要存储所有元素的哈希表
代码
import java.util.HashMap;
public class TwoSum {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
// 判断之前是否存在一个和当前数之和等于目标值的数
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
// 根据题目设定,总是存在解,因此以下语句不会执行
throw new IllegalArgumentException("No two sum solution");
}
}

浙公网安备 33010602011771号