1、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
public class TwoSum {
public static void main(String[] args) {
int[] arr = new int[]{ 7 , 10 , 2 , 6 , 9 , 3 , 4};
System.out.println("" + Arrays.toString(getTwoSum(arr , 13)));
}
private static int[] getTwoSum(int[] nums , int target) {
if (nums == null) {
return null;
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.clear();
for (int i=0;i<nums.length;i++) {
int comp = target - nums[i];
if (map.containsKey(comp)) {
return new int[]{map.get(comp) , i};
}
map.put(nums[i], i);
}
map.clear();
map = null;
return null;
}
}
2、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的所有数组下标。
public class TwoSum {
public static void main(String[] args) {
int[] arr = new int[]{ 7 , 10 , 2 , 6 , 9 , 3 , 4};
List<Integer[]> list = getAllTwoSum(arr , 12);
for (int i=0;i<list.size();i++) {
System.out.println("" + Arrays.toString(list.get(i)));
}
}
/**
* 输出nums数组中两数之和等于target的所有下标对
* @param nums
* @param target
* @return
*/
private static List<Integer[]> getAllTwoSum(int[] nums , int target) {
if (nums == null) {
return null;
}
List<Integer[]> list = new ArrayList<Integer[]>();
list.clear();
Map<Integer , Integer> map = new HashMap<Integer , Integer>();
map.clear();
for (int i=0;i<nums.length;i++) {
int temp = target - nums[i];
if (map.containsKey(temp)) {
list.add(new Integer[]{map.get(temp) , i});
}
map.put(nums[i], i);
}
map.clear();
map = null;
return list;
}
}