一、暴力解
public class TwoSum {
//暴力解
public static void main(String[] args){
int[] nums={2,7,11,15};
int target = 9;
int[] result = twoSum(nums, target);
System.out.println("[" + result[0] + "," + result[1] +"]");
}
public static int[] twoSum(int[] nums,int target){
int[] result=new int[2];
for (int i = 0; i < nums.length; i++) {
for (int j = i+1; j < nums.length; j++) {
if(nums[i]+nums[j] == target){
//返回下标
result[0] = i;
result[1] = j;
}
}
}
return result;
}
二、哈希表
//法二————哈希表法
public static void main(String[] args){
int[] nums={11,15,2,7};
int target = 9;
int[] result = twoSum(nums, target);
System.out.println("[" + result[0] + "," + result[1] +"]");
}
public static int[] twoSum(int[] nums,int target){
int[] result=new int[2];
Map<Integer,Integer> map = new HashMap<>();
//遍历数组,将值和索引存入哈希表中
for (int i = 0; i < nums.length; i++) {
int complement=target - nums[i];
//检查补数是否存在
if(map.containsKey(complement) && map.get(complement)!= i){
//返回补数的下标和当前数的下标
result[0] = map.get(complement);
result[1] = i;
return result;
}
map.put(nums[i],i);
}
//如果没有找到符合条件的两个数,返回空数组(题目中说假设不存在这种情况)
return new int[0];
}