1.暴力枚举
时间复杂度(O(N^2))
public 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;
}
}
}
return result;
}
2.引入HashMap
时间复杂度(O(N))
public int[] twoSum2(int[]nums,int target){
//key为元素值,value为每个元素对应的下标
Map<Integer,Integer> Nums = new HashMap<>();
int [] result = new int[2];
for(int i=0;i<nums.length;i++){
int another = target - nums[i];
Integer anotherIndex = Nums.get(another);
//找到了
if(null != anotherIndex){
result[0] = anotherIndex;
result[1] = i;
break;
}else{
Nums.put(nums[i],i);
}
}
return result;
}
3.用一个哈希表,存储每个数对应的下标
时间复杂度O(n)
public int[] twoSum3(int[] nums,int target){
HashMap<Integer,Integer> map = new HashMap<>();
int[]result = new int[2];
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){
int anotherIndex = map.get(nums[i]);
result[0] = anotherIndex;
result[1] = i;
break;
}else{
map.put(target-nums[i],i);
}
}
return result;
}