两数之和
方法一
首先想到的第一种方法是使用暴力破解法,算法的时间复杂度太高
public static int[] twoSum1(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = 1; j < nums.length; j++) {
if(nums[i]+nums[j] == target){
return new int[]{i,j};
}
}
}
return null;
}
上面的方法使用了两个for循环,一个从数组第一个元素开始遍历,一个循环从数组第二个开始遍历,如果取到的两个数相加的结果等于了target的话,就直接返回一个新数组,数组内容是i,j
方法二
学过数据结构的话都知道,查找效率较高的是哈希表,刚好这道题只是两数之和,所以用哈希表刚刚好
/*
解题思路:1循环遍历一个数组,取到数组里面对应的x值
2:以target-x作为key,到hash表里面去寻找
没有找到,将x作为key,它的索引作为value放入hash表
找到了,返回x和它配对数的索引即可
*/
public static int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int x = nums[i];
int y = target-nums[i];
if(map.containsKey(y)){
return new int[]{map.get(y),i};
}else{
map.put(x,i);
}
}
return null;
}