问题:给定一个整型数组,找出其中的两个数使其和为某个指定的值,并返回这两个数的下标。假设数组元素的值各不相同,则要求时间复杂度为O(n), n为数组的长度。
思路:扫描一遍数组,把键值<value, index>存入哈希表,再次扫描检查target与当前的差值是否在哈希表中。
java实现:
int[] twoSum(int[] A,int target){
int[] res={-1,-1};
if(A==null||A.length<2)
return res;
HashMap<Integer,Integer> ihm=new HashMap<Integer,Integer>();
for(int i=0;i<A.length;i++){
ihm.put(A[i],i);
}
for(int i=0;i<A.length;i++){
if(ihm.containsKey(target-A[i])&&target!=2*A[i]){
res[0]=i;
res[1]=ihm.get(target-A[i]);
break;
}
}
return res;
}