问题描述:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
UPDATE (2016/2/13):
The return format had been changed to zero-based indices. Please read the above updated description carefully.
一道送分题,思路:先遍历一边数组,用HashMap存储value与index的对应关系。
再重新遍历一边数组,用target-nums[i]得到remain,从HashMap中查找有没有以remain为key值的,如果有,则返回index,没有则继续遍历。
代码如下:
import java.util.*;
public class TwoSumSolution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,HashSet<Integer>>h=new HashMap<Integer,HashSet<Integer>>();
HashSet<Integer>s;
int left=0,second=0;
int[]idexs=new int[2];
for(int i=0;i<nums.length;i++){
if(h.containsKey(nums[i])){
s=h.get(nums[i]);
}
else{
s=new HashSet<Integer>();
}
s.add(i);
h.put(nums[i],s);}
for(int i=0;i<nums.length;i++){
left=target-nums[i];
if(h.containsKey(left))
{
idexs[0]=i;
s=h.get(left);
for(Iterator it=s.iterator();it.hasNext();){
second=(int) it.next();
if(second!=i){
idexs[1]=second;
break;
}
}
}
}
return idexs;
}
public static void main(String[]args){
TwoSumSolution c=new TwoSumSolution();
int[] nums={0,4,0,3};
for(int i:c.twoSum(nums,7))
System.out.print(i+" ");
}
}