1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
(1)暴力法
public class Test {
/**
* 暴力法
*/
public static int[] twoSum(int[] nums, int target){
int n = nums.length;
for(int i = 0; i < n-1; i++){
for(int j = i+1; j < n; j++){
if(nums[i] + nums[j] == target){
return new int[]{i, j};
}
}
}
return new int[]{-1, -1};
}
public static void main(String[] args){
int[] nums = {2, 7, 11, 15};
int target = 9;
int[] indexs = twoSum(nums, target);
System.out.println(Arrays.toString(indexs));
}
}
先令i等于第一个元素,然后j等于i+1一直到最后一个元素,如果两者相加等于target,则返回其下标;否则,i向后移动,j继续遍历。
(2)哈希表
public class Test {
/**
* 哈希表
*/
public static int[] twoSum(int[] nums, int target){
int n = nums.length;
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < n; i++){
if(map.containsKey(target - nums[i])){
return new int[]{map.get(target - nums[i]), i};
}
//将数组的值作为key,下标作为value存入map
map.put(nums[i], i);
}
return new int[]{-1, -1};
}
public static void main(String[] args){
int[] nums = {2, 7, 11, 15};
int target = 9;
int[] indexs = twoSum(nums, target);
System.out.println(Arrays.toString(indexs));
}
}
主要利用了哈希表的查找,将数组的值作为key,下标作为value存入map。
使用到了containsKey方法和get方法,containsKey方法用于判断是否存在一个值等于target-num[i],如果有就使用get方法获取其下标,返回该下标和i;如果没有继续循环。