题目:
Given an array of integer and a target number. please find out two number that add up to the target.
Code:
import java.util.*;
class Test{
public static void main(String[] args){
Solution sol = new Solution();
int[] A = {9, 1, 2, 3, 4, 8, 7};
int target = 9;
int[] res = sol.getTwo(A, target);
System.out.println(res[0]);
System.out.println(res[1]);
res = sol.getVal(A, target);
System.out.println(res[0]);
System.out.println(res[1]);
}
}
class Solution{
//Sorting法
public int[] getVal(int[] A, int target){
int[] res = {-1, -1};
Arrays.sort(A);
int i=0, j=A.length-1;
while(i < j){
if(A[i]+A[j] > target) j--;
else if(A[i]+A[j] < target) i++;
else{
res[0] = A[i];
res[1] = A[j];
return res;
}
}
return res;
}
//HashMap法
public int[] getTwo(int[] A, int target){
HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
int[] res = {-1, -1};
for(int i=0; i<A.length; i++){
if(hm.containsKey(A[i])){
res[0] = hm.get(A[i]);
res[1] = i;
return res;
}
else{
hm.put(target-A[i], i);
}
}
return res;
}
}
总结:
HashMap的方法复杂度为O(lg(n)),并且在返回index与数值的选择上更为灵活。