一组解和多种解
时间复杂度为O(n)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class 两数之和 {
//找一组解
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; ++i) {
if (hashtable.containsKey(target - nums[i])) {
return new int[]{hashtable.get(target - nums[i]), i};
}
hashtable.put(nums[i], i);
}
return new int[0];
}
//找多组解
public int[]twoSum2(int nums[],int target){
HashMap<Integer, Integer> hashMap = new HashMap<>();
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i <nums.length ; i++) {
if(hashMap.containsKey(target-nums[i])){
arrayList.add(i);
arrayList.add(hashMap.get(target-nums[i]));
}
hashMap.put(nums[i],i);
}
int n=arrayList.size();
int []b=new int[n];
for (int i = 0; i <arrayList.size() ; i++) {
b[i]=arrayList.get(i);
}
return b;
}
public static void main(String[] args) {
int nums[]={2,7,3,4,5,11,15};
int target=1;
两数之和 a = new 两数之和();
int[] twoSum = ((两数之和) a).twoSum2(nums, target);
for (int i=0;i<twoSum.length;i++)
System.out.println(twoSum[i]);
//System.out.println(nums[twoSum[i]]);
}
}