输入一个数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
与剑指57题类似,但是不要求数组是有序的。
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
//第一次循环遍历将数组元素存储到哈希表中
for(int i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
//第二次遍历寻找数组中是否存在这样的数字对
for(int i = 0; i < nums.length; i++) {
int key = target - nums[i];
if(map.containsKey(key)) return new int[] {nums[i], key};
}
return new int[] {-1, -1};
}
空间复杂度:哈希表的空间。O(N);
时间复杂度:两次循环遍历时间。O(2N).